【DB筆試面試477】NULL有哪些注意事項?

  • 2019 年 10 月 11 日
  • 筆記

題目部分

NULL有哪些注意事項?

答案部分

在運算時,NULL(空)值不參與運算。判斷是否為NULL值只能用IS NULL或IS NOT NULL,不能用=NULL或<>NULL,有關NULL值有如下幾點需要注意:

① 空值是無效的、未指定的、未知的或不可預知的值。

② 空值不是空格,也不是0。

③ 包含空值的數學表達式的值(即加減乘除等操作)都為空值NULL。

④ 對空值進行連接字元串的操作之後,返回被連接的字元串。

⑤ 用IS NULL來表示為空,用IS NOT NULL來表示不為空,除此之外沒有其它的表示方法了,這一點尤為重要。

⑥ COUNT(1)、COUNT(*)、COUNT(ROWID)、COUNT(常量)、COUNT(主鍵)、COUNT(非空列)這幾種方式統計的行數是表中所有存在的行的總數,包括值為NULL的行和非空行。所以,這幾種方式的執行結果相同。通過10053事件可以看到這幾種方式除了COUNT(ROWID)之外,其它最終都會轉換成COUNT(*)的方式來執行。需要注意的是:這裡的COUNT(1)中的「1」並不表示表中的第一列,它其實是一個表達式,可以換成任意數字或字元或表達式。

a.COUNT(允許為空列) 這種方式統計的行數不會包括欄位值為NULL的行。

b.COUNT(DISTINCT 列名) 得到的結果是除去值為NULL和重複數據後的結果。

⑦ NULL在排序中默認為最大值,DESC在最前,ASC在最後,可以加上NULLS LAST來限制NULL值的顯示。

⑧ 如果子查詢結果中包含NULL值,那麼NOT IN (NULL、AA、BB、CC)返回為空。示例如下:

SYS@lhrdb> SELECT COMM,COUNT(1) FROM SCOTT.EMP GROUP BY COMM;        COMM   COUNT(1)  ---------- ----------                     10        1400          1         500          1         300          1           0          1  SYS@lhrdb> SELECT B.EMPNO, B.COMM FROM SCOTT.EMP B WHERE B.SAL IN (800,1600);       EMPNO       COMM  ---------- ----------        7369        7499        300  SYS@lhrdb> SELECT * FROM SCOTT.EMP A WHERE A.COMM NOT IN (SELECT  B.COMM FROM SCOTT.EMP B WHERE B.SAL IN (800,1600)) ;  no rows selected  SYS@lhrdb> SELECT * FROM SCOTT.EMP A WHERE A.COMM NOT IN (SELECT  B.COMM FROM SCOTT.EMP B WHERE B.SAL IN (800,1600) AND B.COMM IS NOT NULL ) ; --正確寫法       EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO  ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------        7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30        7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30        7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30

在SCOTT.EMP表,除了COMM為空和300的記錄還有COMM為1400、500和0的記錄。

本文選自《Oracle程式設計師面試筆試寶典》,作者:李華榮。

About Me:小麥苗

● 本文作者:小麥苗,只專註於資料庫的技術,更注重技術的運用

● 作者部落格地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列題目來源於作者的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

● 題目解答若有不當之處,還望各位朋友批評指正,共同進步

Tags: