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;)
- 按照on后的條件篩選B.id<3
- 1中查詢出的結果與A left join
語句二
- 先left join
- 然后再根據where條件再次篩選
使用注意事項:
- ON后面的篩選條件主要是針對關聯表的(對於主表的篩選條件不適用)
- 對於主表的篩選條件應該放在where后面,不應該放在ON后面
- 如果查詢條件查詢后才join連接應該把查詢條件放在ON后面;如果要連接完畢后才篩選應該把條件放在where后面
- 對於關聯表可以先做子查詢再join