in not in 和 null , in 判斷范圍中可以包含null,而not in判斷不能包括null


oracle中,任何字符串與null比較得到的結果都是null,而 oracle的判斷條件為null時就退出判斷(?)

因此判斷某個字符串是否在一個集合中時,not in 和 in的結果完全不一樣,如

select * from airport_heliport  t where t.airport_heliport_uuid in
(
  select 'e6513669-8cb7-41d9-85af-11ab26930790' from dual
  union
  select null from dual
)

返回正常一條記錄,

而,將 in 改成 not in后,感覺應該返回多條記錄,但實際上返回空集合。

原因是:

in 判斷時,每條記錄與集合里的每一個記錄比較,只要有一條記錄比較相同,就返回true。所以,即使這個集合里有null,也不影響in的結果。

但not in就不一樣了,not in要與集合中每條記錄比較,每條記錄都不相同才返回true。當集合中包含null時,每條記錄與之比較都會退出,所以返回的集合也必定為null

因此,not in 判斷的集合不能包含null,而in判斷的集合可以包括null

此外,如果一個字段a可以取值 Y,N和null;如果要取出所有不為Y的記錄,不能寫成 where a<>'Y',這樣所有取值為null的記錄並不能返回,也不能寫成 where a in (null,'N'),同樣也取不到null的記錄

只能寫成

where nvl(a,'N') ='N' 或者

where a is null or a ='N'


免責聲明!

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



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