sql多表操作列出每门课考试都及格的学生学号和学生姓名(60分为及格)
时间: 2024-02-18 12:03:42 浏览: 29
假设我们有以下表格:
- student (学生表):包含学生的学号和姓名
- course (课程表):包含课程的编号和名称
- score (成绩表):包含学生学号、课程编号和成绩
则可以使用以下 SQL 语句来列出每门课都及格的学生学号和姓名:
```
SELECT student.学号, student.姓名
FROM student, score
WHERE student.学号 = score.学号
AND score.成绩 >= 60
AND NOT EXISTS (SELECT * FROM course
WHERE NOT EXISTS (SELECT * FROM score
WHERE score.学号 = student.学号
AND score.课程编号 = course.课程编号))
GROUP BY student.学号, student.姓名
```
解释一下这个 SQL 语句:
1. 使用 `SELECT` 语句选择出学生的学号和姓名;
2. 使用 `FROM` 子句指定 `student` 和 `score` 表;
3. 使用 `WHERE` 子句将 `student` 表和 `score` 表连接起来,并筛选出成绩大于等于 60 分的记录;
4. 使用 `NOT EXISTS` 子句来判断该学生是否有一门课程不及格,如果不存在这样的课程,则表示该学生每门课都及格;
5. 使用 `GROUP BY` 子句将结果按照学号和姓名分组。