首先有三张表,学生表、课程表、成绩表
student:studentId,studentName;
course:courseId,courseName,teacher;
score:score,studentId,courseId;
接着有以下几道题目:
①查询课程编号为‘0006’的总成绩:
首先总成绩,使用Sum(score), 接着根据课程编号:courseId
成绩只有score表里面有,同时还能获取到另一个必要条件,因此只需一个表
SELECT SUM(score) FROM score WHERE courseId='0006';
②查询选了课程编号为'0006'的学生人数:
又要有课程编号,又要有学生人数,这里仅仅需要score表就行了,使用条件courseId(进行选择)和studentId(获取学生人数)
SELECT COUNT(studentId) FROM score WHERE courseId='0006';
③查询各科成绩最高和最低分:
要获取最高和最低使用MAX()和MIN(),各科则需要按照课程Id(courseId)分组
SELECT courseId,MAX(score),MIN(score) FROM score GROUP BY courseId;
④查询每门课程被选修的学生人数:
每一门:说明要分组,GROUP BY(courseId),学生人数:COUNT(student)
SELECT courseId,COUNT(studentId) FROM score GROUP BY courseId;
⑤查询平均成绩大于60分的学生的学号
平均成绩:AVG(score),同时还要有学号studentId,同样使用score表,注意,有很多门课程求平均值,所以要按照学生分组,在以上基础上在做选择要60分以上的,使用HAVING
SELECT studentId,AVG(score) FROM score GROUP BY studentId HAVING AVG(score)>60;
⑥查询至少选修三门课程的学生学号
要有课程和学号,一个score表就够了,要想具体知道一个学生选修的课程数,同样需要按学生分组
SELECT studentId,COUNT(courseId) FROM score GROUP BY student HAVING COUNT(courseId) >=3;
⑦查询所有有过不及格成绩的学生的姓名(不重复)
查询姓名需要student表,不及格成绩的就同时要使用score表,这里则要两个表,使用studentId来连接,要求不重复则使用DISTINCT
SELECT DISTINCT studentName FROM student st LEFT JOIN score sc ON st.studentId=sc.studentId WHERE score <60;
⑧查询两门及以上课程不及格的学生姓名
SELECT studentName,COUNT(studentName) FROM student st LEFT JOIN score sc ON st.studentId=sc.studentId WHERE score < 60 GROUP BY studentName HAVING COUNT(studentName)>=2;