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 CTEACHER='李明' 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 )T WHERE S.SNO=T.SNO AND SC.SNO=T.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 )T WHERE S.SNO=T.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 )T WHERE S.SNO=T.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 )T WHERE S.SNO=T.SNO