问题描述: 已知关系模式: S(SNO,SNAME)学生关系。SNO为学号,SNAME为姓名 C(CNO,CNAME,CTEACHER)课程关系。CNO为课程号,CNAME为课程名,CTEACHER为任课教师 SC(SN" name="description" />

SQL Server练习题2

发表于:2007-06-07来源:作者:点击数: 标签:
题目2 MI LY: quot; BACKGROUND-COLOR: #fafafa; Verdana: ; quot: ; Courier: ; mono: ">问题描述: 已知关系模式: S(SNO,SNAME)学生关系。SNO为学号,SNAME为姓名 C(CNO,CNAME,CTEACHER)课程关系。CNO为课程号,CNAME为课程名,CTEACHER为任课教师 SC(SN

题目2

MILY: " BACKGROUND-COLOR: #fafafa; Verdana: ; quot: ; Courier: ; mono: ">问题描述:
已知关系模式:
S (SNO,SNAME)          学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER)  课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE)     选课关系。SCGRADE 为成绩

1. 找出没有选修过“李明”老师讲授课程的所有学生姓名

--实现代码:
SELECT SNAME FROM S
WHERE NOT EXISTS(
    SELECT * FROM SC,C
    WHERE SC.CNO=C.CNO 
        AND CNAME='李明'
        AND SC.SNO=S.SNO)

2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

--实现代码:
SELECT S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)
FROM S,SC,(
    SELECT SNO
    FROM SC
    WHERE SCGRADE<60
    GROUP BY SNO
    HAVING COUNT(DISTINCT CNO)>=2
)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO
GROUP BY S.SNO,S.SNAME

3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

--实现代码:
SELECT S.SNO,S.SNAME
FROM S,(
    SELECT SC.SNO
    FROM SC,C
    WHERE SC.CNO=C.CNO
        AND C.CNAME IN('1','2')
    GROUP BY SNO
    HAVING COUNT(DISTINCT CNO)=2
)SC WHERE S.SNO=SC.SNO

4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号

--实现代码:
SELECT S.SNO,S.SNAME
FROM S,(
    SELECT SC1.SNO
    FROM SC SC1,C C1,SC SC2,C C2
    WHERE SC1.CNO=C1.CNO AND C1.NAME='1'
        AND SC2.CNO=C2.CNO AND C2.NAME='2'
        AND SC1.SCGRADE>SC2.SCGRADE
)SC WHERE S.SNO=SC.SNO

5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩

--实现代码:
SELECT S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩]
FROM S,(
    SELECT SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE
    FROM SC SC1,C C1,SC SC2,C C2
    WHERE SC1.CNO=C1.CNO AND C1.NAME='1'
        AND SC2.CNO=C2.CNO AND C2.NAME='2'
        AND SC1.SCGRADE>SC2.SCGRADE
)SC WHERE S.SNO=SC.SNO


原文转自:http://www.ltesting.net