sql在Student SC Course中查询1号选修课中非计算机系学生比计算机系学生的平均成绩要高的所有学生的学号与姓名;
时间: 2024-05-03 16:18:23 浏览: 18
可以使用如下 SQL 语句来实现上述查询:
```sql
SELECT s.sid, s.sname
FROM Student s, SC c, Course o
WHERE s.sid = c.sid
AND c.cno = o.cno
AND o.cname = '选修1'
AND s.sdept <> '计算机系'
AND c.grade > (
SELECT AVG(c2.grade)
FROM SC c2, Course o2
WHERE c2.cno = o2.cno
AND o2.cname = '选修1'
AND s.sdept = '计算机系'
)
```
解释一下上述 SQL 语句:
- 首先,我们需要从三张表中进行查询,分别是 `Student`(学生表)、`SC`(选课表)和 `Course`(课程表);
- 我们需要将这三张表进行连接,通过学生ID、课程号和课程名称进行关联;
- 然后,我们需要筛选出选修1课程的记录,使用 `o.cname = '选修1'` 进行筛选;
- 接着,我们需要找出非计算机系学生的记录,使用 `s.sdept <> '计算机系'` 进行筛选;
- 最后,我们需要找出成绩高于计算机系学生平均成绩的记录,使用子查询 `SELECT AVG(c2.grade) FROM SC c2, Course o2 WHERE c2.cno = o2.cno AND o2.cname = '选修1' AND s.sdept = '计算机系'` 来计算计算机系学生的平均成绩,并使用 `c.grade >` 进行比较。