Oracle“不等於號”與Null的情況


今天突然才發現,Oracle中的“不等於操作符”是忽略Null的

比如,查詢comm不等於的300的記錄,我會理所當然地使用where comm != 300

預想會返回包含Null的不等於300的記錄(意識里認為Null也是“不等於30”的其中一種情況)。

而實際上,它只返回不為Null且不等於300的記錄,見如下測試。

 

使用SCOTT的公共數據測試:

--All data
select * from scott.emp t;

--Not equal 300(Not contain null)
select * from scott.emp t where t.comm != 300;

--Not equal 300(Does contain null)
select * from scott.emp t where t.comm != 300 or t.comm is null;
TEST

只返回comm不為null並且不等於300的記錄。

 

事實上,並不僅僅“不等於號”與Null的關系是如此的,其他操作符也類似,只不過“不等於號”使用場景的特殊性讓我們容易發覺此特性。

其中原因在於Null,關於Null的各種情況說明可見以下Oracle的文檔:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm

 

PS,見“寓言因永吟”回復。亦可使用LNNVL方法以解決此問題,具體Oracle文檔描述如下:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions091.htm

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM