left join 中 and 和where的区别

发布于 2020-08-10 10:53:43

总是习惯用left join 中的and 但是后来发现和where并不一样

查看更多

关注者
0
被浏览
473
朋也
朋也 2020-08-10

在使用left jion时,on和where条件的区别如下:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1 tab1:

idsize
110
220
330

表2 tab2:

sizename
10AAA
20BBB
20CCC

两条SQL:

1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA') 

第一条SQL的过程:
1、中间表
on条件:

tab1.size = tab2.size 
tab1.idtab1.sizetab2.sizetab2.name
11010AAA
22020BBB
22020CCC
330(null)(null)

2、再对中间表过滤
where 条件:

tab2.name='AAA' 
tab1.idtab1.sizetab2.sizetab2.name
11010AAA

第二条SQL的过程:
1、中间表
on条件:

tab1.size = tab2.size and tab2.name='AAA' 

(条件不为真也会返回左表中的记录)

tab1.idtab1.sizetab2.sizetab2.name
11010AAA
220(null)(null)
330(null)(null)
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览