EXISTS如何在Oracle中运行,它与IN有什么不同?

时间:2012-01-16 03:00:02

标签: sql oracle

在阅读oracle书时,我无法理解存在的条款。这是我从书中得到的3张照片。

enter image description here 这是使用IN子句的第一个sql语句,我没有理解它。

enter image description here 这是使用EXISTS子句的第二个sql语句,我不明白为什么它在DEPTNO>条件下返回所有行。 20。

enter image description here 这是第3个sql语句,它获取与第一个sql语句相同的行,它需要两个表的额外连接,我无法推理它。

我试过谷歌“EXISTS ORACLE”,但大部分页面都解释了EXISTS和IN之间的区别,但没有解释EXISTS是如何工作的。你们有兴趣解释一下吗?

2 个答案:

答案 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。查询不需要(在第二种情况下不是)与主查询相关。