select * from classes;
id name
1 一班
2 二班
3 三班
4 四班
select * from students;
id class_id name gender
1 1 小明 m
2 1 小紅 f
3 1 小軍 m
4 1 小公尺 f
5 2 小白 f
6 2 小兵 m
7 2 小林 m
8 3 小新 f
9 3 小王 m
10 3 小麗 f
找出每個班級的名稱及其對應的女同學數量
#正確
select c.name, count(s.name) as num
from classes c left join students s
on s.class_id = c.id
and s.gender = 'f'
group by c.name
或者
#錯誤
select c.name, count(s.name) as num
from classes c left join students s
on s.class_id = c.id
where s.gender = 'f'
group by c.name
2.找出一班的同學總數
#正確
select c.name, count(s.name) as num
from classes c left join students s
on s.class_id = c.id
where c.name = '一班'
group by c.name
或者
#錯誤
select c.name, count(s.name) as num
from classes c left join students s
on s.class_id = c.id
and c.name = '一班'
group by c.name
總結:在left join語句中,左表過濾必須放where條件中,右表過濾必須放on條件中 left join加上where條件的困惑
left join的困惑 一旦加上where條件,則顯示的結果等於inner join 將where 換成 and 用where 是先連線然後再篩選 用and 是先篩選再連線 資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion...
left join加上where條件的困惑
left join的困惑 一旦加上where條件,則顯示的結果等於inner join 將where 換成 and 用where 是先連線然後再篩選 用and 是先篩選再連線 資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion...
left join加上where條件的困惑
eft join的困惑 一旦加上where條件,則顯示的結果等於inner join 將where 換成 and 用where 是先連線然後再篩選 用and 是先篩選再連線 資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion時...