sql - 相关子查询如何与 Exists 运算符一起使用?

标签 sql oracle subquery

假设当我使用时

select * from emp where Exists (select * from dept)

我从emp表中获取所有记录;

但是当我使用相关子查询执行时,我只得到最少数量的记录

select * from emp e where Exists (select * from dept d where e.eid=d.deptid)

我不明白它是如何工作的? 那么在什么情况下我应该将子查询与 EXISTS 运算符相关联。 有实时例子吗?

最佳答案

您可以将相关子查询视为一个循环(尽管这不一定是它实际运行的方式)。考虑这个查询:

select e.*
from emp e
where Exists (select 1
              from dept d
              where e.eid = d.deptid
             );

它的意思是:“对于外部查询中的每个 emp 记录,检查 eid 是否具有匹配的 dept.deptid。”如果没有匹配项——因为e.eidNULL或该值不在dept中,则它不返回任何行。

考虑不带相关子句的查询:

select e.*
from emp e
where Exists (select 1
              from dept d
             );

这意味着:“如果 dept 中存在任何行,则返回 emp 中的行。”没有相关子句,因此要么返回所有行,要么不返回任何行。

关于sql - 相关子查询如何与 Exists 运算符一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748095/

相关文章:

java - 使用 Hibernate Criteria 查询 ManyToMany 关系

asp.net - VS2012 - 服务器/数据库资源管理器中未显示 "Create table"或 "show table data"菜单选项

sql - 从无限的层次结构中选择 child

python - 使用 Python 将值列表传递给 Oracle

mysql - 我如何解决旧版本 MySQL 中缺少 where-clause 子查询的问题?

php - PHP如何从两个不同的表中获取信息

mysql - 如何查询两个表以获取未投票的用户?

sql - Oracle SQL解析器

MySQL Grouping 使用 group_concat 然后 Group BY

oracle - 从 ApEx 中的自动完成文本字段获取值