Question05-查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
问题1:查询所有有成绩的SQL
-
SQL如下所示
-
方案1:where做表连接
-
SELECT a.SID, a.Sname, COUNT(b.CID) 选课总数, SUM(score) 总成绩 FROM Student a , SC b WHERE a.SID = b.SID GROUP BY a.SID,a.Sname ORDER BY a.SID;
-
-
方案2:左外连接查询
-
SELECT stu.`SID`, stu.`Sname`, COUNT(sc.`CID`) 选课总数, SUM(sc.`score`) 总成绩 FROM Student stu LEFT JOIN SC sc ON stu.`SID` = sc.`SID` GROUP BY stu.`SID`, stu.`Sname` HAVING SUM(sc.`score`) > 0;
-
-
-
where
和join on
区别之前已经说过了,可以回去看Question01
的随笔 -
运行结果如下所示
问题2:查询所有(包括有成绩和无成绩)的SQL
-
SQL如下所示
-
跟问题1基本一致,因为要查询所有,所以将过滤条件去掉即可
-
SELECT stu.`SID`, stu.`Sname`, COUNT(sc.`CID`) 选课总数, IFNULL(SUM(sc.`score`), 0) 总成绩 FROM Student stu LEFT JOIN SC sc ON stu.`SID` = sc.`SID` GROUP BY stu.`SID`, stu.`Sname`;
-
-
运行结果如下所示