如何使用sql语句操作“学生课程数据库中的三个关系”?

如题所述

设学生课程数据库中有三个关系:
学生关系S(学号,姓名,年龄,性别)
学习关系SC(学号,课程号,成绩)
课程关系C(课程号,课程名)
其中
S#、C#、SNAME、AGE、SEX、GRADE、CNAME分别表示
学号、课程号、姓名、年龄、性别、成绩和课程名。

用SQL语句表达下列操作
(1).检索选修课程名称为“MATHS”的学生的学号与姓名

SELECT
S.学号,S.姓名
FROM SC INNER JOIN C ON SC.课程号 = C.课程号 INNER JOIN S ON SC.学号 = S.学号
where C.课程名 = 'MATHS'

(2).检索至少学习了课程号为“C1”和“C2”的学生的学号
SELECT 学号,iCount=Sum(iCount) From (
SELECT 学号,iCount=1 FROM SC Where 课程号 = 'C1' OR 课程号 = 'C2'
) A Group by 学号

(3).检索年龄在18到20之间(含18和20)的女生的学号、姓名和年龄

SELECT 学号,姓名,年龄 FROM S WHERE 性别='女' And 年龄 >= 18 And 年龄 <= 20

(4).检索平均成绩超过80分的学生的学号和平均成绩

SELECT * FROM (
SELECT 学号,平均成绩=Avg(成绩) FROM SC Group By 学号
) A WHERE 平均成绩 > 80

(5).检索选修了全部课程的学生姓名

SELECT
S.姓名
FROM
(
SELECT 学号 FROM(SELECT 学号,学习课程总数=Count(课程号),课程总数=Isnull((select count(课程号) From C),0) FROM SC Group By 学号) A Where 学习课程总数 = 课程总数
) L INNER JOIN S ON L.学号 = S.学号

(6).检索选修了三门以上的学生的姓名
SELECT
S.姓名
FROM
(
SELECT 学号 FROM (SELECT 学号,课程数=sum(iCount) FROM (SELECT 学号,iCount=1 FROM SC) A GROUP BY 学号) A WHERE 课程数 > 3
) L INNER JOIN S ON L.学号 = S.学号
温馨提示:答案为网友推荐,仅供参考