论坛首页 综合技术论坛

关于这个表连接中过滤条件的执行

浏览 1169 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-02-20  
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会选择执行哪一个?
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics