问答详情
源自:4-12 [Oracle] 子查询中的空值问题

子查询中的空值问题,最后这点有点不明白

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这个员工吗?

提问者:楚青岚 2019-03-24 15:21

个回答

  • Amousy
    2019-03-30 18:44:00
    已采纳

    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个老板员工)。

  • 慕哥2346272
    2020-05-28 20:58:33

    子查询排除的是king这个员工, 但是king下面有员工, 就是说king的员工号(deptno)已经在mgr里面了, 所以最终查询会排除king的员工号