Oracle「不等於號」與Null的情況

2022-03-26 17:43:02 字數 774 閱讀 7164

今天突然才發現,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 !=

300or t.comm is

null;

test

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

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

其中原因在於null,關於null的各種情況說明可見以下oracle的文件:

ps,見「寓言因永吟」回覆。亦可使用lnnvl方法以解決此問題,具體oracle文件描述如下:

oracle 不等於號和null問題

關於oracle中的不等於號 在oracle中,都是不等於號的意思。都可以使用。price是number型別的 select id,name from product where price 1000 price是number型別的 執行這個語句時,priceis null 的記錄不出來。也就是拿不...

Oracle中的不等於號

今天碰到乙個oracle不等於的問題,最後搜尋了一下,發現下面資料,拿來跟大家分享一下 關於oracle中的不等於號 在oracle中,都是不等於號的意思。都可以使用。但是奇怪是的,我想拿出price不是180000的商品時 price是number型別的 select id,name from p...

Oracle中不等於號問題

在oracle中,不等於號有以下幾種方式 測試sql create table test id int,name varchar2 10 age int insert into test id,name,age values 1,zhangsan 23 insert into test id,nam...