SQL通用函数

SQL通用函数

今天,我们将了解结构化查询语言(SQL)中的一些新函数。我们要学习的几个函数是。

  • NVL()
  • COALESCE()
  • NVL2()
  • NANVL()
  • DECODE()yb
  • LNNVL()

NVL()

这是结构化查询语言大量使用的SQL功能之一(SQL)。

这个函数只接受两个输入值。如果提供的值超过2,将返回一个错误。当在函数中搜索时,这个函数返回第一个NOT NULL值。

如果任何一个或两个参数都是NULL,这个函数就没有输出。

空白区域表示在开发者创建的SQL表中有一个NULL值。

输入的数据类型包括整数、浮点数、字符串、字符输入等等。

语法

NVL(input value 1 , input value 2)

查询示例

查询1

SQL> select NVL(15 , 20) from dual;

查询输出

NVL(15,20)
_ _ _ _ _ _
      15

查询2

SQL> select NVL(NULL , 115) from dual;

查询输出

NVL(NULL,115)
_ _ _ _ _ _ _ _
    115

查询3

SQL> select NVL(1.027584 , 1.0275384) from dual;

查询输出

NVL(1.027584 ,1.0275384)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ 

       1.027584

查询4

SQL> select NVL(NULL , 7.0124375) from dual;

查询输出

NVL(NULL,7.0124375)
_ _ _ _ _ _ _ _ _ _ _ _
     7.0214375

查询5

SQL> select NVL('JAMES' , 'ANDERSON') from dual;

查询输出

NVL
_ _ _
JAMES

查询6

SQL> select NVL(NULL , 'ANDERSON') from dual;

查询输出

NVL(
_ _ _ _
ANDERSON

查询7

SQL> select Commission_percent from salary;

查询输出

COMMISSION_PERCENT
_ _ _ _ _ _ _ _ _ _ _ _ _ _
    .16
    .14
    .05


    .385

8 rows selected.

查询8

SQL> select select NVL(Commission_percent,0) from salary;

查询输出

NVL(COMMISSION_PERCENT,0)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      .16
      .14
      .05
        0
        0
     .385
        0
        0

8 rows selected.

查询9

SQL>     select ID_NO , NAME , SALARY , NVL(COMMISSION_PERCENT , 0) ,
    SALARY +(SALARY * NVL(COMMISSION_PERCENT, 0))
        TOTAL FROM SALARY;

查询输出

ID_NO          NAME               SALARY        NVL(COMMISSION_PERCENT,0)            TOTAL
_ _ _ _    _ _ _ _ _ _ _       _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _    _ _ _ _ _ _ _
1       Joe Burns               52600                       .16                 61016
2       Ross Boss               93700                       .14                 106818
3       Steven Smith            75000                       .05                 78750
4       Chris Lynn              35000                         0                 35000
5       Mitch Starc             39900                         0                 39900
6       Ricky Ponting           230000                      .385                318550
7       Pat Cummins             23000                         0                 23000
8       Scott Boland            10000                         0                 10000
8 rows selected.

查询10

SQL> select ID_NO , NAME , SALARY , NVL(COMMISSION_PERCENT , 0) ,
    (SALARY * 12) +(SALARY * NVL(COMMISSION_PERCENT, 0))
        YEAR_SAL FROM SALARY;

查询输出

ID_NO          NAME                SALARY       NVL(COMMISSION_PERCENT,0)     YEAR_SAL
_ _ _ _    _ _ _ _ _ _ _       _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _       _ _ _ _ _ _ _
1         Joe Burns               52600                       .16                     639616
2         Ross Boss               93700                       .14                     1137518
3         Steven Smith            75000                       .05                     903750
4         Chris Lynn              35000                         0                     420000
5         Mitch Starc             39900                         0                     478800
6         Ricky Ponting           230000                      .385                    2848550
7         Pat Cummins             23000                         0                     276000
8         Scott Boland            10000                         0                     120000
8 rows selected.

COALESCE()

这也是SQL表达式之一。这个表达式的功能类似于NVL()。唯一的区别是,它现在接受大于两个的输入。第一个NOT NULL输入元素被返回。

可以使用任何形式的输入数据。输入的形式可以是整数、浮点数、字符串、字符、数字等等。

语法

COALESCE(input value 1 , input value 2 , input value 3 , . . . . . . . . . . , input value n)

查询示例

查询1

SQL> select COALESCE(NULL , 15) from dual;

查询输出

COALESCE(NULL,1)
_ _ _ _ _ _ _ _ _ _ _
     15

查询2

SQL> select COALESCE(16 , 29 ,32) from dual;

查询输出

COALESCE(16,29,32)
_ _ _ _ _ _ _ _ _ _ _
      16

查询3

SQL> select COALESCE(NULL , 29 , 32) from dual;

查询输出

COALESCE(NULL,29,32)
_ _ _ _ _ _ _ _ _ _ _ _ 
        29

查询4

SQL> select COALESCE(NULL , NULL , 32) from dual;

查询输出

COALESCE(NULL,NULL,32)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
        32

查询5

SQL> select COALESCE(NULL , NULL , NULL, NULL, NULL) from dual;

查询输出

C
_

查询6

SQL> select COALESCE(NULL , NULL , NULL , 41 , NULL , 36 , 77 , NULL , 64 , NULL) from dual;

查询输出

COALESCE(NULL,NULL,NULL,41,NULL,36,77,NULL,64,NULL)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                     41

查询7

SQL> select COALESCE(NULL , 'NULL' , 'James Anderson' , 'Ricky Ponting' , 'NULLED') from dual;

查询输出

COAL
_ _ _ _
NULL

查询7 解释

Here, the output of the query is NULL.
This is because NULL is a word specified under the quotes.
So, because of this factor NULL is considered as String but not as a NULL value.
So, that was the reason why NULL was printed as an output.

查询8

SQL> select COALESCE(NULL , ' ' , 'James Anderson' , 'Ricky Ponting' , 'NULLED') from dual;

查询输出

C
_

查询8 解释

Here, the Output is just a blank space, but not a NULL value.

NVL2()

这是结构化查询语言大量使用的SQL功能之一(SQL)。

在这个函数中只能存储三个输入值。如果提供的值超过三个,将返回一个错误。在函数中搜索时,该函数返回第一个不为空的值。

  • 如果第一个值为NOT NULL,则返回第二个值。
  • 如果第一个值是NULL并且第二个值不是NULL,则返回第三个值。
  • 被返回的值有可能是NULL。
  • 这个功能的操作方式与SQL中的NVL()相同。
  • 如果任何参数或两个参数都是NULL,这个函数没有输出。
  • 输入的数据类型包括整数、浮点数、字符串、字符输入等等。

语法

NVL2(input value 1 , input value 2 , input value 3)

例子

查询1

SQL> select NVL2(11 , 21 , 13) from dual;

查询输出

NVL2(11,21,13)
_ _ _ _ _ _ _ _
    21

查询2

SQL> select NVL2(62 , 62 , 63) from dual;

查询输出

NVL2(62,62,63)
_ _ _ _ _ _ _ _ _
    62

查询3

SQL> select NVL2(4 , 2 , 63) from dual;

查询输出

NVL2(4,2,63)
_ _ _ _ _ _ _ _ 
    2

查询4

SQL> select NVL2(4 , NULL , 63) from dual;

查询输出

NVL2(4,NULL,63)
_ _ _ _ _ _ _ _ _ 

查询5

SQL> select NVL2(NULL , NULL , 63) from dual;

查询输出

NVL2(NULL,NULL,63)
_ _ _ _ _ _ _ _ _ _ _ _
       63

查询6

SQL> select NVL2(NULL , 89 , 63) from dual;

查询输出

NVL2(NULL,89,63)
_ _ _ _ _ _ _ _ _ _ _
     63

查询7

SQL> select NVL2('James' , 'ANDERSON' , 179) from dual;

查询输出

NVL2('JA
_ _ _ _ _ _
ANDERSON

查询8

SQL> select NVL2(NULL , 'ANDERSON' , 179) from dual;

查询输出

NVL
_ _ _
179

查询9

SQL> select NVL2(' NULL' , 'ANDERSON' , 179) from dual;

查询输出

NVL2('NU
--------
ANDERSON

查询10

SQL> select NVL2(56.2 , 35.6 , 23.4) from dual;

查询输出

NVL2(56.2,35.6,23.4)
--------------------
     35.6

查询11

SQL> select NVL2(NULL , 35.6 , 23.4) from dual;

查询输出

NVL2(NULL,35.6,23.4)
--------------------
       23.4

查询12

SQL> select NVL2(NULL , NULL , 23.459) from dual;

查询输出

NVL2(NULL,NULL,23.459)
----------------------
        23.459

查询13

SQL> select NVL2(NULL , NULL , NULL) from dual;

查询输出

N
-

执行操作的表

ID_NO          NAME                SALARY       COMMISSION_PERCENT      
_ _ _ _    _ _ _ _ _ _ _       _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _       
1       Joe Burns                 52600                       .16                     
2       Ross Boss                 93700                       .14                     
3       Steven Smith              75000                       .05                   
4       Chris Lynn                35000                                               
5       Mitch Starc               39900                                               
6       Ricky Ponting             230000                      .385                  
7       Pat Cummins               23000                                               
8       Scott Boland              10000                             

查询 14

SQL>    select ID_NO , NAME , SALARY , NVL2(COMMISSION_PERCENT , SALARY , 0) ,
        SALARY +(SALARY * NVL2(COMMISSION_PERCENT , 0.2 , 0.1))
        WierdSAL FROM SALARY;

查询输出

ID_NO     NAME          SALARY     NVL2(COMMISSION_PERCENT,SALARY,0)   WIERDSAL

_ _ _   _ _ _ _ _ _ _   _ _ _ _ _     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _    _ _ _ _ _ _ _
1       Joe Burns           52600                       52600                               63120

2       Ross Boss           93700                       93700                               112440

3       Steven Smith        75000                       75000                               90000

4       Chris Lynn          35000                       0                                   38500

5       Mitch Starc         39900                       0                                   43890

6       Ricky Ponting       230000                      230000                              276000

7       Pat Cummins         23000                       0                                   25300

8       Scott Boland        10000                       0                                   11000


8 rows selected.

NANVL()

该方法NANVL()在输入值n2为NaN(非数字)的情况下返回n1,而在n2不是NaN的情况下返回n2。在这个函数中,只有BINARY FLOAT或BINARY DOUBLE类型的浮点数可以被利用。

该函数可以隐含地将任何输入数据类型,无论是非数字还是数字,都转换为数字数据类型。

如果参数是BINARY FLOAT,该方法将提供一个BINARY DOUBLE值;否则,它将返回一个与参数匹配的数字数据类型。

语法

NANVL(input value 1 , input value 2)

查询示例

查询1

SQL> SELECT * FROM NUMBER;

查询输出

   DEC_NUM  BIN_DOUBLE            BIN_FLOAT
_ _ _ _ _ _ _     _ _ _ _ _ _ _ _       _ _ _ _ _ _ _  
 9273.420   9.273E+003         9.273E+003

插入查询

SQL> INSERT INTO FPT VALUES(0 , 'NaN' , 'NaN');
SQL> INSERT INTO FPT VALUES(10 , 'NaN' , 'NaN');
SQL> INSERT INTO FPT VALUES(100 , 'NaN' , 'NaN');

插入查询输出

1 row created.
1 row created.
1 row created.

查询2(打印表格内容)

SQL> SELECT * FROM NUMBER ;

查询输出

   DEC_NUM  BIN_DOUBLE            BIN_FLOAT
_ _ _ _ _ _ _     _ _ _ _ _ _ _ _       _ _ _ _ _ _ _  
 3563.971   3.564E+003         3.564E+003
       0        Nan              Nan
       10       Nan              Nan
      100       Nan              Nan

查询3

SQL>    SELECT DEC_NUM, BIN_DOUBLE, BIN_FLOAT,
    NANVL(DEC_NUM, 0), NANVL(BIN_DOUBLE, 0), NANVL(BIN_FLOAT, 0)
    from NUMBER;

查询输出

   DEC_NUM  BIN_DOUBLE            BIN_FLOAT
_ _ _ _ _ _ _     _ _ _ _ _ _ _ _       _ _ _ _ _ _ _  
 3563.971   3.564E+003         3.564E+003
       0         Nan             Nan
       10        Nan             Nan
      100        Nan             Nan
NANVL(DEC_NUM,0) NANVL(BIN_DOUBLE,0)  NANVL(BIN_DOUBLE,0)
_ _ _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _         _ _ _ _ _ _ _ _ _ _ _ _ _
3563.971     3.564E+003                 3.564E+003
0           0               0
10          0               0
100         0               0

DECODE

这也是我们在结构化查询语言(SQL)中可以看到的表达方式之一。IF, ELSE, IF, ELSE 梯形风格被用于这个解码短语。基于所提到的条件,这个解码器就会运行。

任何被列出的程序都会在这种情况下发挥作用。

输入类型必须根据提供的数据类型来选择。

语法

DECODE(column  name ,  number 1 to be searched , result 1 to be updated 
                     , number 2 to be searched , result 2 to be updated
                      , number 3 to be searched , result 3 to be updated   
             . . . . . . . . . 
                      number n to be searched , result n to be updated  , default)

查询示例

查询1

SQL> select * from iplb;

查询输出

      SID     SNAME  SAL
_ _ _   _ _ _ _ _     _ _ _ _ _
1   Dhoni           12
2   DK              6.25
3   Sir             14
4   KL              16
5   Pant            16
6   Yuzi            6.25
7   SKY             12

查询2

SQL > SELECT Sname, sid, sal,
             DECODE(sid, 4, 1.5*sal,
                          7, 3*sal,
                          6, 7*sal,
                          1, 12*sal,
                                    sal)
            "FAKE SALARY"
    from iplb ;

查询输出

SNAME             SID        SAL    FAKE SALARY
_ _ _ _         _ _ _ _    _ _ _ _  _ _ _ _ _ _ _
Dhoni              1         12         144
DK                 2       6.25        6.25
Sir                3         14          14
KL                 4         16          24
Pant               5         16          16
Yuzi               6       6.25       43.75
SKY                7         12          36

7 rows selected.

查询3

SQL > SELECT Sid, Sname, Sal  ,
               DECODE(sid ,1 , 1 * sid * sal ,
                            2 , 4 * sid * sal ,
                            3 , 9 * sid * sal ,
                            4 , 16 * sid * sal ,
                            5 , 25 * sid * sal ,
                            6 , 36 * sid * sal ,
                            7 , 49 * sid * sal ,
                           sal/2)
               "F A K E SALARY"
       from iplb ;

查询输出

       SID      SNAME       SAL      F A K E SALARY
_ _ _ _ _ _  _  _ _ _ _   _ _ _ _  _ _ _ _ _ _ _ _ 
         1        Dhoni       12          12
         2        DK          6.25        50
         3        Sir         14          378
         4        KL          16          1024
         5        Pant        16          2000
         6        Yuzi        6.25        1350
         7        SKY         12          4116

LNNVL()

这是在SQL中采用的SQL函数之一。它用于改变True和False的值。

一个条件可以由LNNVL()函数持有。这将导致情况的改变。

如果SID=3是条件,那么。因此,SID! =3与LNNVL(SID = 3)相同。

语法

LNNVL(Condition)

表查询1

SQL> select * from iplb;

表查询输出

 SID     SNAME      SAL
_ _ _   _ _ _ _ _     _ _ _ _ _
 1  Dhoni           12
2   DK              6.25
3   Sir             14
4   KL              16
5   Pant            16
6   Yuzi            6.25
7   SKY              12

查询示例

查询1

SQL> select * from iplb where sid = 3;

查询输出

SID      SNAME             SAL
_ _ _   _ _ _ _ _     _ _ _ _ _
3   Sir                14

查询2

SQL> select * from iplb where LNNVL(sid = 3);

查询输出

SID      SNAME             SAL
_ _ _   _ _ _ _ _     _ _ _ _ _
 1  Dhoni           12
2   DK              6.25
4   KL              16
5   Pant            16
6   Yuzi            6.25
7   SKY             12

表查询

SQL> select * from salary;

表查询输出示例

ID_NO          NAME                SALARY        COMMISSION_PERCENT      
_ _ _ _    _ _ _ _ _ _ _       _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _       
1       Joe Burns                52600                       .16                      
2      Ross Boss                 93700                       .14                      
3      Steven Smith              75000                       .05                    
4     Chris Lynn                 35000                                                
5     Mitch Starc                39900                                                
6     Ricky Ponting              230000                      .385                     
7     Pat Cummins                23000                                                
8      Scott Boland              10000                                                
8 rows selected.

查询3

SQL> select * from salary where NVL(commission_percent, 0) = 0;

查询输出

ID_NO          NAME                SALARY        COMMISSION_PERCENT      
_ _ _ _    _ _ _ _ _ _ _       _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _             
4     Chris Lynn                 35000                               0                
5     Mitch Starc                39900                               0                
7     Pat Cummins                23000                               0                
8     Scott Boland               10000                               0  

查询4

SQL> select * from salary where LNNVL(NVL(commission_percent, 0) = 0);

查询输出

ID_NO          NAME                SALARY        COMMISSION_PERCENT      
_ _ _ _    _ _ _ _ _ _ _       _ _ _ _ _ _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _       
1       Joe Burns                52600                       .16                      
2      Ross Boss                 93700                       .14                      
3      Steven Smith              75000                       .05                    
6     Ricky Ponting              230000                      .385       

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程