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

来源:4-1 数据操作语言:表连接查询(一)

磊哥技术

2021-07-19 07:41:48

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

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

相关截图:

http://img.mukewang.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回答

好帮手慕小小

2021-07-19

同学你好

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 学习 · 9886 问题

查看课程