select mgr from emp where mgr is not null->得出的结果是除了king以外的全部老板,然后select * from emp where empno not in(select mgr from emp where mgr is not null)->得出的不应该是全部非老板的员工加上king这个员工吗?
SQL> select distinct mgr from emp where mgr is not null; MGR ---------- 7839 7782 7698 7902 7566 7788 已选择6行。
用distinct可以找到不重复记录,
select distinct mgr from emp where mgr is not null;
上面这条语句的功能可以找到所有老板。很明显King(7839)是包括在里面的,为什么select * from emp where empno not in(select mgr from emp where mgr is not null)得到的记录不包括King而只是全部非老板员工呢?那是因为对比查找的时候,King这个人并没有被排除,当用他的empno对比上面6个数据时,自然会匹配到7839(King),从而被排除。故最终结果只会输出8个非老板员工(即全部员工剪去上面6个老板员工)。
子查询排除的是king这个员工, 但是king下面有员工, 就是说king的员工号(deptno)已经在mgr里面了, 所以最终查询会排除king的员工号