NOT IN之後的子查詢不能包含NULL值
如果空值可能是子查詢結果的一部分,則不應與主查詢中的NOT IN運算子一起使用。為什麼呢?看下面例子就明白了。
NOT IN後面的子查詢有記錄為NULL,主查詢查不到記錄
select * from emp where 3 not in (1, 2, null);
未選定行
因為這個查詢可以理解為
select * from emp where 3 <> 1 and 3 <> 2 and 3 <> null;
由於NULL值不能參與比較運算子,導致條件不成立,因此查詢不出來資料。
如果是IN運算則能查到資料
select * from emp where 1 in (1, 2, null);
因為可將該查詢理解為
select * from emp where 1 = 1 or 1 = 2 or 1 = null;
雖然NULL值同樣不能做比較,但或運算的短路效應使得前面條件已成立時全盤條件即成立,因此輸出了結果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2645761/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL 查詢中的 NULL 值SQLNull
- 如何在es中查詢null值Null
- NOT IN子查詢中出現NULL值對結果的影響你注意到了嗎Null
- MySQL之連線查詢和子查詢MySql
- SQL查詢的:子查詢和多表查詢SQL
- 複雜查詢—子查詢
- 再議包含DBLINK的查詢優化優化
- ORACLE_OCP之SQL_子查詢OracleSQL
- Oracle分組查詢中包含子查詢列,發生ORA-00937:不是單分組函式的錯誤Oracle函式
- 二分搜尋樹系列之[查詢(Search)-包含(Contain)]AI
- 二分搜尋樹系列之「查詢(Search)-包含(Contain)」AI
- PostgreSQL排序把null值排在後面SQL排序Null
- NULL列時,如何使得IS NULL或者IS NOT NULL可以使用索引來提高查詢效率Null索引
- MYsql 子查詢MySql
- MySQL子查詢MySql
- 子串查詢
- Python查詢包含指定字串的所有Office文件Python字串
- Python查詢包含指定字串的所有檔案Python字串
- 查詢演算法__插值查詢演算法
- 遇到403 Forbidden ,伺服器端查詢後結果是http get查詢字串中包含非法字元ORB伺服器HTTP字串字元
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- C#演算法設計查詢篇之03-插值查詢C#演算法
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!MySqlNull索引
- MySQL exists關聯子查詢SQL效能及其低下最佳化之等值子查詢轉換MySql
- 區分關聯子查詢和非關聯子查詢
- 【java】【插值查詢】Java
- Javaweb-子查詢JavaWeb
- 巢狀子查詢巢狀
- GORM subquery 子查詢GoORM
- 【NULL】Oracle null值介紹NullOracle
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 查詢前90%的資料值
- 插值查詢的簡單理解
- 遞迴查詢子元素遞迴
- 教你使用SQLite 子查詢SQLite
- MySQL 相關子查詢MySql
- 【MySQL】檢視&子查詢MySql