on和where的执行顺序是什么样的?

on和where的执行顺序是什么样的?

老师,join中的on是先执行on,然后再执行where吗?

为什么我试的,把e1.ename = "SCOTT"和e1.deptno = e2.deptno不论哪个放前面,结果都一样?如果把e1.deptno = e2.deptno放到最前面,那么结果集的临时表不应该是所有的员工吗?

相关截图:

http://img1.sycdn.imooc.com//climg/60f4bc340961147106780518.jpg

相关代码:

select e2.deptno,e2.ename
from t_emp e1 join t_emp e2 
on e1.ename = "SCOTT"
where  
e1.deptno = e2.deptno 
and e2.ename != "SCOTT";


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好

1、先执行join on生成临时表,再执行where,where条件是在临时表生成好后,再对临时表进行过滤的条件。

2、e1.ename = "SCOTT"和e1.deptno = e2.deptno不论哪个放where前面,执行结果是一样的,但是生成的中间表是不一样的。

3、e1.deptno = e2.deptno放在on后面where前面生成的临时表不是初始的员工表。

4、e1.ename = "SCOTT"放在on后面where前面生成的是有“e1表条数”条数据的临时表

同学可分别测试一下,观察执行结果,测试代码如下:

on条件为e1.ename=“SCOTT”时:

select e1.deptno,2.deptno,e2.ename
from t_emp e1 join t_emp e2 
on e1.ename = "SCOTT"

on条件为e1.deptno=e2.deptno时:

select e1.deptno,e2.deptno,e2.ename
from t_emp e1 join t_emp e2 
on e1.deptno=e2.deptno

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师