not in 中包含null值是個悲劇
如果使用not in 那麼子查詢中一定不能有null值,如果子查詢中有null值那麼查詢無結果返回。
1.測試 not in 子查詢中包含null值
測試表test_t
SQL> select * from test_t ;
ID NAME
---------- --------------------
1 a
2 b
3 c
測試表test_t2
SQL> select * from test_t2 ;
ID NAME
---------- --------------------
100 z
test_t表插入一條空資料
SQL> insert into test_t values (4,null);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_t;
ID NAME
---------- --------------------
1 a
2 b
3 c
4
not in 子查詢中包含null 查詢無結果
SQL> select * from test_t2 where name not in (select name from test_t);
no rows selected
刪除空資料
SQL> delete test_t where id=4;
1 row deleted.
SQL> select * from test_t;
ID NAME
---------- --------------------
1 a
2 b
3 c
not in 子查詢中不包含null 查詢結果正常
SQL> select * from test_t2 where name not in (select name from test_t);
ID NAME
---------- --------------------
100 z
總結:當not in 子查詢有null值時,沒有結果返回。
2.測試 not exists 子查詢包含null值
not exists 子查詢沒有null值結果正常
SQL> select * from test_t2 t2 where not exists (select 1 from test_t t where t.name=t2.name);
ID NAME
---------- --------------------
100 z
test_t表中插入null值
SQL> insert into test_t values(4,null);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_t;
ID NAME
---------- --------------------
1 a
2 b
3 c
4
not exists子查詢有null值時結果也正常
SQL> select * from test_t2 t2 where not exists (select 1 from test_t t where t.name=t2.name);
ID NAME
---------- --------------------
100 z
總結:not exists子查詢中是否包含null值結果集都正常
3.測試 in和exists 子查詢包含null值
SQL> insert into test_t2 values (99,'a');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_t2;
ID NAME
---------- --------------------
100 z
99 a
SQL> select * from test_t;
ID NAME
---------- --------------------
1 a
2 b
3 c
4
SQL> select * from test_t2 where name in (select name from test_t);
ID NAME
---------- --------------------
99 a
SQL> select * from test_t2 t2 where exists (select 1 from test_t t where t.name=t2.name);
ID NAME
---------- --------------------
99 a
總結:in和exists子查詢中是否有null值結果集都正常
------------------end-------------------
DBA_建瑾
2014.10.23
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29324876/viewspace-1308471/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個SEOer的悲劇工作生涯
- 文明的悲劇
- NOT IN之後的子查詢不能包含NULL值Null
- hive中的null值HiveNull
- 是什麼造成了中國軟體產業的悲劇?產業
- SAP解析ERP悲劇(轉)
- SQL中的空值NULLSQLNull
- SQL server中的NULL值SQLServerNull
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- SQL 查詢中的 NULL 值SQLNull
- 去除陣列中的 null 值陣列Null
- 專利之殤:微軟要把Android變成一個悲劇微軟Android
- Given-When-Then的悲劇。 | IT風險經理
- iPhone 7悲劇!蘋果更新重大調整iPhone蘋果
- 【NULL】Oracle null值介紹NullOracle
- mysql中null與“空值”的坑MySqlNull
- 如何在es中查詢null值Null
- javascript中null是什麼JavaScriptNull
- 悲劇!又要重新開始做SQL Server了SQLServer
- MySQL 的 NULL 值是怎麼儲存的?MySqlNull
- 未開啟HugePages ORACLE session劇增時引起的一次悲劇OracleSession
- HTC悲劇了 連續五個季度虧損 營收同比大降42.7%營收
- 程式設計師如何避免“滴滴式裁員”悲劇?程式設計師
- 悲劇!iPhone 7取消耳機介面惹怒30萬果粉iPhone
- iPhone 6 Plus送蘋果維修:結構黑悲劇iPhone蘋果
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- NULL 值與索引Null索引
- javascript中怎麼判斷某變數是null,undefined,還是不存這個變數 ? 以及變數是array 還是 object 還是 null ?JavaScript變數NullUndefinedObject
- index 包含null值得簡單測試IndexNull
- jquery取值和賦值(包含部分是原生js的取值和賦值)jQuery賦值JS
- 不再迷惑,無值和 NULL 值Null
- MySQL null值儲存,null效能影響MySqlNull
- 檢視oracle資料庫中,哪些表的欄位是null值比較多Oracle資料庫Null
- 關於NULL值在索引裡的兩個疑惑Null索引
- NULL 值與索引(二)Null索引
- null(空值)小結Null
- hive NULL值影響HiveNull
- case when遇上null值Null