查詢中空值null的查理

skyin_1603發表於2016-10-09

空值在查詢中的處理:

在查詢的時候,空值的存在,會影響查詢資料結果的質量,甚至不準確,
我們要知道:null<>null,null<>0,空值null與其他資料的四則運算的結果都是空值。

以下處理講述一些在查詢中處理空值的函式。


1、在忽略空值的情況下查詢獎金為空員工的工資加獎金作為收入:

SQL> select ename,sal,comm,sal+comm as income

  2  from emp

  3  where comm is  null;

ENAME             SAL       COMM     INCOME

---------- ---------- ---------- ----------

SMITH             800

JONES            2975

BLAKE            2850

CLARK            2450

SCOTT            3000

KING             5000

ADAMS            1100

JAMES             950

FORD             3000

MILLER           1300

10 rows selected.

從查詢結果的資料看,income欄位為空,則表示對應的員工收入為空,這是明顯的錯誤。


2、以下運用到以下空值處理函式:

1》nvl(expr1,expr2):


expr1 不為空值,返回expr1,當為空值,返回expr2.

SQL> select ename,sal,comm,sal+nvl(comm,0) income

  2  from emp

  3  where comm is  null;

ENAME             SAL       COMM     INCOME

---------- ---------- ---------- ----------

SMITH             800                   800

JONES            2975                  2975

BLAKE            2850                  2850

CLARK            2450                  2450

SCOTT            3000                  3000

KING             5000                  5000

ADAMS            1100                  1100

JAMES             950                   950

FORD             3000                  3000

MILLER           1300                  1300

10 rows selected.


2》nvl2(expr1,expr2expr3):

expr1 不為空值,返回expr3,當為空值,返回expr2

SQL> select ename,sal,comm,nvl2(comm,sal+comm,sal) income

  2  from emp

  3  where comm is  null;

ENAME             SAL       COMM     INCOME

---------- ---------- ---------- ----------

SMITH             800                   800

JONES            2975                  2975

BLAKE            2850                  2850

CLARK            2450                  2450

SCOTT            3000                  3000

KING             5000                  5000

ADAMS            1100                  1100

JAMES             950                   950

FORD             3000                  3000

MILLER           1300                  1300

10 rows selected.


3》nullif(expr1,expr2):

expr1,expr2當兩值相等,返回空值,兩值不等時,返回expr1

SQL> select nullif(3,2),nullif(100,100)

  2  from dual;

NULLIF(3,2) NULLIF(100,100)

-----------   ---------------

   3


4》coalesce(expr1,expr2...exprn):

返回第一個不為空值null的表示式exprn

檢視部門號為30的員工相關資訊,顯示獎金,當獎金為空值時,並標明為1

SQL> select ename,sal,comm,coalesce(comm,1),

  2  nvl(sal+comm,sal) income,deptno

  3  from emp

  4   where deptno = 30;

ENAME             SAL       COMM COALESCE(COMM,1)     INCOME     DEPTNO

---------- ---------- ---------- ---------------- ---------- ----------

ALLEN            1600        300              300       1900         30

WARD             1250        500              500       1750         30

MARTIN           1250       1400             1400       2650         30

BLAKE            2850                           1       2850         30

TURNER           1500          0                0       1500         30

JAMES             950                           1        950         30

6 rows selected.


上面的4個函式中,都要求函式式裡面的表示式的資料型別要相同。

SQL> select coalesce('','next','su','xing') from dual;

COAL

----

next


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2126001/,如需轉載,請註明出處,否則將追究法律責任。

相關文章