在阅读oracle书时,我无法理解存在的条款。这是我从书中得到的3张照片。
这是使用IN子句的第一个sql语句,我没有理解它。
这是使用EXISTS子句的第二个sql语句,我不明白为什么它在DEPTNO>条件下返回所有行。 20。
这是第3个sql语句,它获取与第一个sql语句相同的行,它需要两个表的额外连接,我无法推理它。
我试过谷歌“EXISTS ORACLE”,但大部分页面都解释了EXISTS和IN之间的区别,但没有解释EXISTS是如何工作的。你们有兴趣解释一下吗?
答案 0 :(得分:11)
以下是两者的详细解释以及如何决定使用哪一个: http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080
Exists检查子查询是否返回结果。基本上,如果你要使用子查询并自己执行它,如果它至少返回一行,那么条件为真。第三个查询添加了第二个条件,该子条件将子查询链接到父查询,因此它检查特定人员是否具有deptno的部门> 20
答案 1 :(得分:8)
第二个查询返回所有行,因为它与主表不相关(相关),结果集大于0.第三个查询是相关子查询(E.DeptNo =),这就是为什么它返回与第一个查询相同的结果。
EXIST子句表示运行查询,一找到第一个匹配就停止。如果找到匹配项,则返回true,否则返回false。查询不需要(在第二种情况下不是)与主查询相关。