【NULL】Oracle null值介紹

xysoul_雲龍發表於2022-03-21

如果一行中的一個列沒有值,那麼這個列就被稱為空,或者說包含空。空值可以出現在任何資料型別的列中,

並且不受NOT NULL或PRIMARY KEY完整性約束的限制。當實際值不為人知或者一個值沒有意義的時候,可以使用null。


Oracle資料庫將一個長度為0的字元值視為null。然而,不要使用null來表示一個數值為0的數值,因為它們並不等同。


一個評估為UNKNOWN的條件的作用幾乎與FALSE相同。

例如,一個在WHERE子句中帶有條件的SELECT語句,如果評估為UNKNOWN,則不返回任何記錄。

然而,評價為UNKNOWN的條件與FALSE的不同之處在於,對UNKNOWN條件評價的進一步操作將評價為UNKNOWN。

因此,NOT FALSE評估為TRUE,但是NOT UNKNOWN評估為UNKNOWN。


表3-20顯示了涉及條件中空值的各種評估的例子。

如果在SELECT語句的WHERE子句中使用了評價為UNKNOWN的條件,那麼這個查詢就不會有記錄被返回。



示例:

-- in null, 透過檢視執行計劃,發下 他們是or,null值忽略
SQL> select * from t2 where id in (1,2,null);
	ID NAME
---------- ------------------------------
	 1 aaa
	 2 ccc
Execution Plan
----------------------------------------------------------
Plan hash value: 1513984157
--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |     2 |    14 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T2	 |     2 |    14 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("ID"=1 OR "ID"=2)
--改為not in測試,發現 關聯是and, and後只要有一個false,則整個是false,所以,無結果
SQL> select * from t2 where id  not in (1,2,null);
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 1513984157
--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |     1 |     7 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T2	 |     1 |     7 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("ID"<>TO_NUMBER(NULL) AND "ID"<>1 AND "ID"<>2)


參考:

連結自動遮蔽,參考Oracle官方書籍 Oracle sql language Reference 中部分章節,如null、not in/in 等,如下圖所示:

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

相關文章