mysql中join后on、where的區別


SELECT * FROM A;

SELECT * FROM B;

以上是兩張表的機構



 

SELECT * FROM A LEFT JOIN B ON A.id=b.a_id ;

語句一   :   SELECT * FROM A LEFT JOIN B ON A.id=b.a_id AND A.id <3;

語句二:  SELECT * FROM A LEFT JOIN B ON A.id=b.a_id WHERE B.id <3;

兩個語句查詢出來的結果是有差異的

sql查詢的關鍵字順序為  from -> where -> group by-> having ->order by

left join 是在from范圍的所以先on條件篩選,然后再做left join

而where是在left join的結果之后再次篩選

語句一(等價於SELECT *FROM A LEFT JOIN (SELECT * FROM B WHERE B.id < 3) b2 ON A.id = b2.a_id;)

  1. 按照on后的條件篩選B.id<3
  2. 1中查詢出的結果與A left join

語句二

  1. 先left join 
  2. 然后再根據where條件再次篩選

 



 

使用注意事項:

  1. ON后面的篩選條件主要是針對關聯表的(對於主表的篩選條件不適用)
  2. 對於主表的篩選條件應該放在where后面,不應該放在ON后面
  3. 如果查詢條件查詢后才join連接應該把查詢條件放在ON后面;如果要連接完畢后才篩選應該把條件放在where后面
  4. 對於關聯表可以先做子查詢再join


免責聲明!

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



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