题解 | #使用含有关键字exists查找未分配具体部门的员工的所有信息。#

使用含有关键字exists查找未分配具体部门的员工的所有信息。

http://www.nowcoder.com/practice/c39cbfbd111a4d92b221acec1c7c1484

思路:本题可以使用 EXISTS 和 IN 来解决

EXISTS:

SELECT *
FROM employees
WHERE NOT EXISTS (SELECT * FROM dept_emp WHERE dept_emp.emp_no = employees.emp_no)

IN:

SELECT *
FROM employees
WHERE emp_no NOT IN (SELECT emp_no from dept_emp)

EXISTS和IN的效率对比: 当主表为employees,从表为dept_emp时,在主表和从表都对关联的列emp_no建立索引的前提下:

  1. 当主表比从表大时,IN查询的效率较高;
  2. 当从表比主表大时,EXISTS查询的效率较高;

原因如下:

IN是先执行子查询,得到一个结果集,将结果集代入外层谓词条件执行主查询,子查询只需要执行一次。

EXISTS是先从主查询中取得一条数据,再代入到子查询中,执行一次子查询,判断子查询是否能返回结果,主查询有多少条数据,子查询就要执行多少次。

SQL练习 文章被收录于专栏

已完成牛客的SQL练习。接下来是算法的练习

全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
10-11 15:42
皖西学院 Java
青鱼LINK:我硕士,也是java0面试,吾道不孤
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务