MySql數據查詢中 left join 條件位置區別


/*
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
*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM