要解决的问题:筛选不是领导的普通员工信息。
表的相关信息如下:
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值的使用,推荐下链接,
https://www.douban.com/note/520633402/可以理解为unknown,因为null值与任何值操作都是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查询结果:可以查出相应的不是领导的普通员工的信息【正确】
以上思想来源慕课网,大家可以到上面学习补充能量