即使它有性能问题,我可以知道相关子查询的用途是什么吗?
答案 0 :(得分:7)
一个常见的用法示例:显示每个部门最新雇用员工的详细信息:
select e.deptno, e.empno, e.ename, e.hiredate, e.sal
from emp e
where e.hiredate = (select max(e2.hiredate)
from emp e2
where e2.deptno = e.deptno -- the correlation
);
答案 1 :(得分:3)
嗯,首先它没有性能问题。它就是这样,并且考虑到硬件和数据库结构的性能限制,它将尽可能地执行。
至于什么是有用的,它只是表达特定逻辑条件的一种方式。
答案 2 :(得分:2)
使用相关子查询必须对查询中依赖于该行中的一个或多个值的每一行执行某些操作。
因此,例如,如果您想知道根据另一个表中发生的事情在结果集中包含一行,您可能会这样做:
SELECT * FROM YourTable YT WHERE
EXISTS (SELECT * FROM SomeOtherTable SOT WHERE
SOT.ID = YT.ID AND SOT.SomeInteger BETWEEN YT.LowInteger AND YT.HighInteger)
同样在UPDATE中:
UPDATE YourTable YT SET YourColumn =
(SELECT SUM(SomeColumn) FROM SomeOtherTable SOT
WHERE SOT.ID = YT.ID AND SOT.SomeField <> YT.SomeField)
有时这些查询可以使用标准JOIN编写,但有时不会。