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

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

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高级查询
  • 参与学习       62760    人
  • 解答问题       144    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信