使用相关子查询

时间:2009-11-25 06:32:05

标签: sql oracle

即使它有性能问题,我可以知道相关子查询的用途是什么吗?

3 个答案:

答案 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编写,但有时不会。