SQL 中IN、NOT IN 對結果含NULL的子查詢使用
阿新 • • 發佈:2019-02-02
要解決的問題:篩選不是領導的普通員工資訊。
表的相關資訊如下:
emp(員工表) empno(員工號)mgr(員工的上級領導號)。
總體思路。只要在mgr(員工的上級領導號)列中不包含的員工都屬於普通員工。
1.sql如下:
Select *
from emp
where empno not in (select mgr from emp );
sql查詢結果:未選定行(其實是有的)【錯誤】
而反過來再查下領導的資訊:
2.sql如下:
Select *
From emp
Where empno in (select mgr from emp );
Sql查詢結果:可以查出相應的領導資訊【正確】
分析1.sql錯誤原因:子查詢中出現null值,還是使用了not in 情況。因not in 等於<>所有
a not in (10,20,null)
a !=10 and a!=20 and a!=null (其中a!=null一直會是false,這也是出錯的原因)
而null值的使用,推薦下連結,
那麼1.sql可以改為
3.sql如下:
Select *
From emp
Whe Select *
from emp
where empno not in (select mgr from empwhere mgr is not null );
sql查詢結果:可以查出相應的不是領導的普通員工的資訊【正確】
以上思想來源慕課網,大家可以到上面學習補充能量