mysql中join後on、where的區別

SELECT * FROM A;

SELECT * FROM B;

以上是兩張表的機構sql



 

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;

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

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

left join 是在from範圍的因此先on條件篩選,而後再作left joincode

而where是在left join的結果以後再次篩選blog

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

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

語句二im

  1. 先left join 
  2. 而後再根據where條件再次篩選

 



 

使用注意事項:查詢

  1. ON後面的篩選條件主要是針對關聯表的(對於主表的篩選條件不適用)
  2. 對於主表的篩選條件應該放在where後面,不該該放在ON後面
  3. 若是查詢條件查詢後才join鏈接應該把查詢條件放在ON後面;若是要鏈接完畢後才篩選應該把條件放在where後面
  4. 對於關聯表能夠先作子查詢再join
相關文章
相關標籤/搜索