on与where的区别
on是先对表进行筛选再生成关联表,where是先生成关联表再对关联表进行筛选,on执行的优先级高于left join,而where的优先级低于left join
当我们使用on关键字时,会先根据on后面的条件进行筛选,条件为真时返回该行,由于on的优先级高于left join,所以left join关键字会把左表中没有匹配的所有行也都返回,然后生成临时表返回
where对与行的筛选是在left join之后的,也就是生成临时表之后才会对临时表进行筛选
比如下面的例子:
SELECT * FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno AND sal<1000
这里on先对左表进行了筛选,但是left join还是会把坐标中不匹配的行也全部返回
SELECT * FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno WHERE sal<1000
这里由于先生成关联表,然后where才对行进行筛选所以只会剩下三条满足条件的行
总结:
on是先筛选后关联,where是先关联后筛选