/*
A 和 B 兩張表都只有一個 ID 字段
比如A表的數據為 ID 1,2,3,4,5,6
B表的數據為 ID 1,2,3
判斷 JOIN 查詢時候條件在 ON 和 WHERE 時的區別
ON 和 WHERE 查詢順序有關
標准查詢關鍵字執行順序為 FROM->WHERE->GROUP BY->HAVING->ORDER BY
LEFT JOIN 是在 FROM 范圍內 所以先 ON 條件篩選表,然后兩表再做 LEFT JOIN
而對於 WHERE 來說是在 LEFT JOIN 結果再次篩選
*/
select A.ID as AID, B.ID as BID
from A
left join
B
on A.ID = B.ID
where
B.ID<3;
/*
1.這個語句是先執行 LEFT JOIN 即是:
select A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID
2.再將查詢結果中的 B.ID < 3 篩選出來
*/
select A.ID as AID, B.ID as BID
from A
left join
B
on A.ID = B.ID and B.ID<3;
/*
1.這個語句是先安裝 ON 條件 B.ID < 3 篩選出來,即是先執行:
select ID from B where ID < 3;
2.再將查詢結果中的結果與A表做 LEFT JOIN,所以會保留A表所有的數據
ON與where的使用一定要注意場所:
(1):ON后面的篩選條件主要是針對的是關聯表【而對於主表刷選條件不適用】。
(2):對於主表的篩選條件應放在where后面,不應該放在ON后面。
(3):對於關聯表我們要區分對待。如果是要條件查詢后才連接應該把查詢件放置於ON后。
如果是想在連接完畢后才篩選就應把條件放置於where后面。
(4): 對於關聯表我們其實可以先做子查詢再做join
第二個sql語句等價於
select A.ID as AID, B1.ID as BID
from A left join ( select B.ID from B where B.ID < 3 )B1 on A.ID = B1.ID
*/