联合查询时过滤条件放在ON之后和放在WHERE之后的区别
有两个表,A表和B表,我们经常会通过一些关键字段来联合查询两张表里的数据,如:
select *
from A
left join B
on A.bizNo = B.bizNo
如果我们想要在上述条件上再增加一些过滤条件,比如B.name = 'XXX'。
那么我们有两种写法:
写法1:
select *
from A
left join B
on A.bizNo = B.bizNo and B.name = 'XXX'
写法2:
select *
from A
left join B
on A.bizNo = B.bizNo
where B.name = 'XXX'
这两种写法的区别在于,过滤条件放在ON的后面是在联合之前就进行过滤,放在WHERE后面是在联合之后的结果集上进行过滤。
如果A的记录在B中都能够查到数据的话,那么两种写法的结果是一样的。
否则会有差别,假如A中有两条记录a1,a2,其中a1可以在B中查到记录,a2无法查到记录。
那么在写法1的情况下,最终的结果集会有两条记录如下:
a1 b1
a2 null
在写法2的情况下,最终的结果集只有一条记录:
a1 b1