【NULL】Where子句中=1 與!=1UNION後的結果是全集麼?——NULL小夥惹的禍
與“NULL小夥”有關的趣聞很多,有興趣的朋友可以先看一下這個文章熱熱身。
《【問題處理】“NOT IN”與“NULL”的邂逅》(http://space.itpub.net/519536/viewspace-627169)
1.建立測試表T並初始化三條資料,注意一條資料是NULL值。
sec@ora10g> create table t (x number);
Table created.
sec@ora10g> insert into t values (1);
1 row created.
sec@ora10g> insert into t values (null);
1 row created.
sec@ora10g> insert into t values (3);
1 row created.
sec@ora10g> commit;
Commit complete.
2.檢視T表中的資料並確認T表中的總資料條數
sec@ora10g> select * from t;
X
----------
1
3
sec@ora10g> select count(*) from t;
COUNT(*)
----------
3
沒有問題。
3.有趣的事情發生了
sec@ora10g> select count(*) from (select * from t where x = 1 union all select * from t where x != 1);
COUNT(*)
----------
2
按照正常的邏輯思考,對於同一張表T的x欄位等於1和不等於1的資料集合應該是全集,為什麼此時返回的記錄只有2條。
4.問題同樣處在NULL值上
sec@ora10g> select * from t where x = 1;
X
----------
1
sec@ora10g> select * from t where x != 1;
X
----------
2
對於條件“x != 1”,因為NULL是一個不確定的狀態,因此此時NULL值是不被檢索到的。
5.同樣的道理like與not like對於含有NULL值的表進行統計時,也不是全集
sec@ora10g> select count(*) from (select * from t where x like '1' union all select * from t where x not like '1');
COUNT(*)
----------
2
6.小結
每當出現所謂“靈異事件”時,我們需要的只是冷靜的思考,任何異常現象都可以追本溯源。
少一分浮躁,多一分實操。
Good luck.
secooler
10.06.09
-- The End --
《【問題處理】“NOT IN”與“NULL”的邂逅》(http://space.itpub.net/519536/viewspace-627169)
1.建立測試表T並初始化三條資料,注意一條資料是NULL值。
sec@ora10g> create table t (x number);
Table created.
sec@ora10g> insert into t values (1);
1 row created.
sec@ora10g> insert into t values (null);
1 row created.
sec@ora10g> insert into t values (3);
1 row created.
sec@ora10g> commit;
Commit complete.
2.檢視T表中的資料並確認T表中的總資料條數
sec@ora10g> select * from t;
X
----------
1
3
sec@ora10g> select count(*) from t;
COUNT(*)
----------
3
沒有問題。
3.有趣的事情發生了
sec@ora10g> select count(*) from (select * from t where x = 1 union all select * from t where x != 1);
COUNT(*)
----------
2
按照正常的邏輯思考,對於同一張表T的x欄位等於1和不等於1的資料集合應該是全集,為什麼此時返回的記錄只有2條。
4.問題同樣處在NULL值上
sec@ora10g> select * from t where x = 1;
X
----------
1
sec@ora10g> select * from t where x != 1;
X
----------
2
對於條件“x != 1”,因為NULL是一個不確定的狀態,因此此時NULL值是不被檢索到的。
5.同樣的道理like與not like對於含有NULL值的表進行統計時,也不是全集
sec@ora10g> select count(*) from (select * from t where x like '1' union all select * from t where x not like '1');
COUNT(*)
----------
2
6.小結
每當出現所謂“靈異事件”時,我們需要的只是冷靜的思考,任何異常現象都可以追本溯源。
少一分浮躁,多一分實操。
Good luck.
secooler
10.06.09
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-664853/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- where語句中多條件查詢欄位NULL與NOT NULL不確定性查詢Null
- 為什麼typeof null 的結果為 objectNullObject
- 你真的知道typeof null的結果為什麼是‘object‘嗎?NullObject
- 為毛 "typeof null" 的結果為 "object" ?NullObject
- MySQL NOT NULL列用 WHERE IS NULL 也能查到資料的原因MySqlNull
- SQL語句中聚合函式忽略NULL值的總結SQL函式Null
- SQL 語句中關於 NULL 的那些坑SQLNull
- SQL語句中NULL的真實含義SQLNull
- null(空值)小結Null
- shell 中的>/dev/null 2>&1 是什麼鬼?devNull
- create table as select where 1=0會把null和not null屬性也帶上Null
- not null與check is not nullNull
- 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別devNull
- NOT IN之後的子查詢不能包含NULL值Null
- UML已死?其實是敏捷惹的禍?敏捷
- 索引裡的NULL值與排序小記索引Null排序
- NOT IN子查詢中出現NULL值對結果的影響你注意到了嗎Null
- mysql探究之null與not nullMySqlNull
- javascript中null是什麼JavaScriptNull
- 了不起的 “filter(NULL IS NOT NULL)”FilterNull
- MySQL 的 NULL 值是怎麼儲存的?MySqlNull
- SpringCloud FeignClient呼叫返回結果為null。SpringGCCloudclientNull
- Difference between 2>&-, 2>/dev/null, |&, &>/dev/null, >/dev/null, 2>&1devNull
- in、exists操作與null的一點總結Null
- ((NULL) null).printNULL();((NULL) null).printnull();Null
- Null 與 “” 的區別Null
- “NOT_IN”與“NULL”的邂逅Null
- MySQL案例-TIMESTAMP NOT NULL與NULLMySqlNull
- MySQL中is not null和!=null和<>null的區別MySqlNull
- 都是髒資料惹的禍
- > /dev/null 2>&1 什麼意思?devNull
- Oracle RAC啟動失敗-軟連結惹的禍Oracle
- undefined與null的區別UndefinedNull
- null與indexNullIndex
- NULL與索引Null索引
- null與substrNull
- NULL與排序Null排序
- 都是標量子查詢惹的禍