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
祝学习愉快~
2023版Java工程师
- 参与学习 人
- 提交作业 8790 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星