首先有三張表,學生表、課程表、成績表
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;