题解 | #使用含有关键字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练习。接下来是算法的练习

全部评论

相关推荐

点赞 评论 收藏
分享
和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务