学生表:Student(Sno,Sname,Ssex,Sage,Sdept);课程表:Course(Cno,Cname,Cpno,Ccredit);学生选课表:SC(Sno,Cno,Grade)找出每个学生超过他自己选修课程平均成绩的课程号。(用带有EXISTS谓词的子查询)
时间: 2024-12-15 14:14:46 浏览: 9
sql语句练习题及答案
为了找出每个学生超过他自己选修课程平均成绩的课程号,你可以使用带有 EXISTS 谓词的子查询,结合 GROUP BY 和 AVG 函数计算平均成绩。以下是一个SQL查询的例子:
```sql
SELECT S.Sno, C.Cno
FROM Student S
JOIN SC SC1 ON S.Sno = SC1.Sno
JOIN Course C ON SC1.Cno = C.Cno
WHERE NOT EXISTS (
SELECT 1
FROM SC SC2
WHERE SC2.Sno = S.Sno AND C.Cno = SC2.Cno AND (SC2.Grade > (SELECT AVG(Grade) FROM SC WHERE SC.Sno = S.Sno))
)
```
这个查询首先通过 `JOIN` 操作连接学生表 (`Student`)、选课表 (`SC`) 和课程表 (`Course`),然后在外部查询中,对于每个学生的记录,它查找是否存在这样的情况:该学生的某个课程分数高于他们所有课程的平均分。如果不存在这种情况,就返回该学生的学号 (`Sno`) 和相应的课程号 (`Cno`)。
阅读全文