on和where的执行顺序是什么样的?
老师,join中的on是先执行on,然后再执行where吗?
为什么我试的,把e1.ename = "SCOTT"和e1.deptno = e2.deptno不论哪个放前面,结果都一样?如果把e1.deptno = e2.deptno放到最前面,那么结果集的临时表不应该是所有的员工吗?
相关截图:
相关代码:
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";
34
收起
正在回答
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 星