1、 on條件是在生成臨時表時使用的條件,它不管and中的條件是否為真,都會返回左邊表中的記錄。
2、where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左表的記錄)了,條件不為真的就全部過濾掉。
現在有表a和表b
id | name |
1 | a |
2 | b |
3 | c |
4 | d |
表a |
id | name |
1 | A |
2 | B |
表b |
1、on 后面條件用and ,不管條件是否成立 都會把左表的數據全部展示
select * from a left join b on a.id = b.id and b.name = 'B';
2、on 后面條件用where ,在left join 生成的表上在做篩選,這時會把 where中不成立的篩選掉
select * from a left join b on a.id = b.id where b.`name` = 'B';