联合查询时过滤条件放在ON之后和放在WHERE之后的区别

来源:互联网 发布:pp助手mac备份 编辑:程序博客网 时间:2024/05/18 02:25

联合查询时过滤条件放在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






阅读全文
0 0
原创粉丝点击