1. 程式人生 > >SQL 中IN、NOT IN 對結果含NULL的子查詢使用

SQL 中IN、NOT IN 對結果含NULL的子查詢使用

要解決的問題:篩選不是領導的普通員工資訊。

表的相關資訊如下:

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查詢結果:可以查出相應的不是領導的普通員工的資訊【正確】

以上思想來源慕課網,大家可以到上面學習補充能量