相关子查询在具有多个子查询时执行

时间:2012-06-09 16:43:46

标签: sql oracle oracle10g

当有多个子查询时,我怀疑相关的子查询执行情况。

当只有一个子查询时,我知道相关的子查询执行。但是,如果有多个,我无法理解。

我已经提到了很多书籍和网站,但我找不到合适的答案。

以下是两个查询。我知道query1是如何执行的但是query2是怎么做的?

查询1:

select e.ename, e.city 
  from emp1 e 
 where exists ( select f.ename 
                  from emp2 f  
                 where f.ename = ’ajay’ 
                   and e.city = f.city
                       )

QUERY2:

select e.ename 
  from employee e 
 where exists ( select ‘x’ 
                  from emp_company c 
                 where e.ename = c.ename  
                   and exists ( select ‘x’ 
                                  from company m 
                                 where c.cname = m.cname 
                                   and m.city = ’bombay’ 
                                       )
                       )
  1. 在执行query1的第一步中,员工表的第一行enamecity被考虑。
  2. 在执行query1的第二步中,将主查询中考虑的城市与emp2的每一行进行比较。
  3. 将主要查询中的城市与emp2的每一行进行比较;如果任何行满足将行ename添加到列表的条件。
  4. 形成的列表将返回主查询。
  5. 如果返回的列表不为空,则exists计算结果为true。然后emp1表的enamecity添加了输出。
  6. ename表格的第二行中选择city,来自emp1的{​​{1}}。
  7. 请解释一下query2的执行情况,我解释了query1?

1 个答案:

答案 0 :(得分:0)

你的第二个问题是:给我的员工是否有退出他们工作的公司(第一个子查询),以及这些公司(取自第一个子查询)是否存在于孟买(第二个子查询)中。您可以使用以下可能更有效的选择语句获得相同的结果:

select e.ename 
from employee e,
  emp_company ec,
  company c 
where e.ename = ec.ename
  and ec.cname = c.cname
  and c.name = 'bombay'

这就是逻辑。如果您对先生的详细信息感兴趣。 Oracle 获取您可以查看的行查询解释计划