SQL语句left join的时候on和where的执行顺序
背景
数据库中在执行多表操作的时候经常会写过滤条件,可以在left join后边添加on或者where来过滤,俩者有一定的区别
区别
on:on的生效区间是在left join 生成一个临时表的时候,一定返回左表的数据,右表没有的为null
where:where作用于left join以后生成的一个临时表,这是一个新的表,where会将不满足条件的过滤掉
执行顺序
这三个的执行顺序
1.ON
2.JOIN
3.WHERE
例子
b表
a表
原始数据中没有null值,在不添加where过滤条件的情况下,执行一下sql关联语句
SELECT
*
FROM
orders a
LEFT
JOIN
orderdetail b
ON
a.id = b.id
结果如下,发现右表id=5的没有为null
在添加了过滤条件where以后
SELECT
*
FROM
orders a
LEFT
JOIN
orderdetail b
ON
a.id = b.id
WHERE
b.id is null
结果如下,过滤掉了b.id不为null数据
由以上可见,先执行了on生成了一个临时表以后再执行的where将不满足条件的数据过滤掉了