您的位置:首页 > 职场人生

史上最经典的数据库面试题之二

2013-05-27 21:17 225 查看
已知关系模式:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: