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
- 查詢中空值null的查理Null
- 如何在es中查詢null值Null
- NOT IN子查詢中出現NULL值對結果的影響你注意到了嗎Null
- 使用組合索引處理包含空值的查詢索引
- not in 中包含null值是個悲劇Null
- MySQL之連線查詢和子查詢MySql
- 子查詢-表子查詢
- SQL查詢的:子查詢和多表查詢SQL
- 子查詢包含where ..or在Corelated Subquery 中語句中問題
- mysql 查詢欄位為null或者非nullMySqlNull
- mysql的子查詢MySql
- 複雜查詢—子查詢
- where語句中多條件查詢欄位NULL與NOT NULL不確定性查詢Null
- ORACLE_OCP之SQL_子查詢OracleSQL
- 相關子查詢&非相關子查詢概念
- 子查詢的典型例子
- MySQL子查詢MySql
- 子串查詢
- 使用子查詢
- MYsql 子查詢MySql
- oracle子查詢Oracle
- 查詢子串
- 子查詢分解
- 11子查詢
- sql子查詢SQL
- informix子查詢ORM
- 01:查詢特定的值
- 等於NULL的查詢條件導致查詢結果不正確Null
- PostgreSQL排序把null值排在後面SQL排序Null
- MySQL聯結查詢和子查詢MySql
- select查詢之三:子查詢
- SQL入門之4 group by 與子查詢SQL
- OCP課程8:SQL之使用子查詢SQL
- 查詢演算法__插值查詢演算法
- 再議包含DBLINK的查詢優化優化
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 區分關聯子查詢和非關聯子查詢