引言:今天一同學問我,join後面跟where查詢條件,查詢的時候是先關聯再篩選的還是先各自篩選了再關聯的?開始也就憑感覺,應該是先關聯再篩選吧!他問了問為什麼呢?後來我也越想越糾結了,於是找了兩個表試了試,終於得出結論...
看sql:
a表:id name
1 aa
2 bb
b表:id name
1 cc
sql1: select a.*,b.* from a left join b on a.id=b.id where b.id<>1
這時結果集是空的
結果:id name id name
sql2: select a.*,b.* from a left join (select * from b where b.id<>1 ) on a.id=b.id
這時a的會全顯示 b為空結果:
id name id name
1 aa
2 bb
從上面的sql可以看出,如果是先篩選再關聯的話,那麼sql1和sql2的結果集就應該是一樣的,但事實並非如此,所以join後面跟where,是先關聯再篩選,where是對整個結果集的乙個篩選。
sql join on 和where的執行順序)
sql join on 和where的執行順序 left join 左連線,返回左表中所有的記錄以及右表中連線字段相等的記錄。right join 右連線,返回右表中所有的記錄以及左表中連線字段相等的記錄。inner join 內連線,又叫等值連線,只返回兩個表中連線字段相等的行。full join...
join on 和where的執行順序
left join 左連線,返回左表中所有的記錄以及右表中連線字段相等的記錄。right join 右連線,返回右表中所有的記錄以及左表中連線字段相等的記錄。inner join 內連線,又叫等值連線,只返回兩個表中連線字段相等的行。full join 外連線,返回兩個表中的行 left join ...
sql join on 和where的執行順序)
left join 左連線,返回左表中所有的記錄以及右表中連線字段相等的記錄。right join 右連線,返回右表中所有的記錄以及左表中連線字段相等的記錄。inner join 內連線,又叫等值連線,只返回兩個表中連線字段相等的行。full join 外連線,返回兩個表中的行 left join ...