为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

2 回答

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

1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Oracle高级查询
  • 参与学习       62994    人
  • 解答问题       148    个

数据库开发中应用广泛的高级查询,本教程通过大量的案例详细讲解

进入课程

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

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号