MySQL实现学生表,成绩表,课程表,老师表复杂查询,用到了join等高级特性

学生表:学号,姓名,出生日期,性别

成绩表:学号,课程号,分数

课程表:课程号,课程名字

老师表:老师号,姓名


# 查询没选课程的学生人数
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经典问题四表查询(教师,学生,成绩,课程表),不过其中有些需要优化。

本文完整代码在https://github.com/Ivyvivid/interview/tree/master/MySQL%E7%AF%87/%E5%AD%A6%E7%94%9F%E8%A1%A8%E3%80%81%E6%88%90%E7%BB%A9%E8%A1%A8%E3%80%81%E8%AF%BE%E7%A8%8B%E8%A1%A8%E3%80%81%E8%80%81%E5%B8%88%E8%A1%A8%E6%9F%A5%E8%AF%A2

posted @ 2020-03-03 18:54  Ivy_Xu  阅读(1444)  评论(0编辑  收藏  举报