日期:2014-05-16  浏览次数:20664 次

关于这个表连接SQL的过滤条件的执行问题
select e.ename,e.salary,e.deptno 
from employee e join 
      (select deptno,round(avg(salary)) avgsal 
       from employee 
       group by deptno) a 
on e.deptno = a.deptno 
and e.salary > a.avgsal 


其中select子句的查询结果集是:
1 30 4500
2 20 11667
3 10 8000

那么e.salary > a.avgsal是怎么执行的呢?
我今天问了好几个人有两种说法:
1、在表连接之前,满足e.salary > a.avgsal 这个条件的都被查询出来,也就是说一个员工的工资是5000元,但是可能会比对三次,发现其符合条件然后被筛选出来。
2、在表连接之前,每个部门的记录根据e.deptno = a.deptno条件找自己部门的工资平均值来进行比较,然后将符合条件的记录过滤出来。
我想知道这两个说法oracle会执行哪一个?

------解决方案--------------------
测试了个 执行计划中 先关联再筛选