使用相关子查询

hri*_*shi 5 sql oracle

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

Ton*_*ews 8

一个常见的用法示例:显示每个部门最新雇用员工的详细信息:

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
                    );
Run Code Online (Sandbox Code Playgroud)


Dav*_*dge 3

嗯,首先它不存在性能问题。它就是这样,并且在考虑到硬件和数据库结构的性能限制的情况下,它将尽可能地执行。

至于它有什么用,它只是表达特定逻辑条件的一种方式。

  • 你所描述的几乎是一个连接。优化过程的查询转换阶段可以将相关子查询转换为联接,并且可以将其实现为散列联接或嵌套循环等。针对非常大的未索引表的相关子查询很可能会成为性能问题,但这是因为联接效率低下,而不是因为在 SQL 中指定它的语法意味着本质上效率低下的数据库操作。 (5认同)
  • @hrishi:因为那不是它的作用。SQL 是声明性的,因此您可以编写所需的结果,而不是获得该结果的操作。确定如何检索结果是查询优化器的工作。 (3认同)