班级表

学生表

那么现在有两个需求:
1:找出每个班级的名称及其对应的女同学数量
2:找出一班的同学总数
-- 1.找出每个班级的名称及其对应的女同学数量
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

如果想对右表进行限制,则一定要在on条件中进行,若在where中进行则可能导致数据缺失,导致左表在右表中无匹配行的行在最终结果中不出现;(即使右表中没有数据也要补0进行显示)
-- 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

如果想对左表进行限制,则一定要在where条件中进行;(右表中没有符合条件的数据,则不显示)
网友评论