关于这个表连接SQL的过滤条件的执行问题

明月镇魂 2014-02-20 08:11:18
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会执行哪一个?
...全文
136 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
_拙计 2014-02-20
  • 打赏
  • 举报
回复
测试了个 执行计划中 先关联再筛选
明月镇魂 2014-02-20
  • 打赏
  • 举报
回复
引用 1 楼 zhaoxiangchong 的回复:
我大概知道一点,这得看执行计划
确实,我刚才找同学帮忙看了一下执行计划,发现是先根据e.deptno = a.deptno形成中间结果集然后根据e.salary > a.avgsal查询出最终的结果集
善若止水 2014-02-20
  • 打赏
  • 举报
回复
我大概知道一点,这得看执行计划

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧