假设当我使用时
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.eid
为NULL
或该值不在dept
中,则它不返回任何行。
考虑不带相关子句的查询:
select e.*
from emp e
where Exists (select 1
from dept d
);
这意味着:“如果 dept
中存在任何行,则返回 emp
中的行。”没有相关子句,因此要么返回所有行,要么不返回任何行。
关于sql - 相关子查询如何与 Exists 运算符一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748095/