1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有leftjoin的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表:
表1:tab1
idsize
110
220
330
表2:tab2
sizename
10AAA
20BBB
20CCC
1、select*fromtab1leftjointab2ontab1.size=tab2.sizewheretab2.name='AAA'
2、select*fromtab1leftjointab2ontab1.size=tab2.sizeandtab2.name='AAA'
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
1、中间表
on条件:
tab1.size=tab2.sizeandtab2.name='AAA'
(条件不为真也会返回左表中的记录)tab1.idtab1.sizetab2.sizetab2.name
11010AAA
220(null)(null)
330(null)(null)
其实以上结果的关键原因就是leftjoin,rightjoin,fulljoin的特殊性。
不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。
而innerjion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
上一篇:GCC参数是什么
下一篇:PHP中怎么删除数组