學生表:學號,姓名,出生日期,性別
成績表:學號,課程號,分數
課程表:課程號,課程名字
老師表:老師號,姓名
# 查詢沒選課程的學生人數
select count(1) from student s left join score sc on s.sid = sc.sid where sc.cid is null;
#查詢選了課程的學生人數
select count(1) from (select s.sid from student s inner join score sc on s.sid = sc.sid group by sc.sid) t;
#查詢出每門課程的及格人數和不及格人數
select sc.cid,c.`name`,sum(score >= 60) as 及格人數,sum(score < 60) as 不及格人數 from score sc,course c where sc.cid=c.cid group by sc.cid;
這里,順便附上一張交集,並集圖。這個圖完全可以概括所有情況。
更多查詢可以參考mysql經典問題四表查詢(教師,學生,成績,課程表),不過其中有些需要優化。