MySQL实现查看课程(不包括001这门课)都及格的学生
时间: 2024-02-03 18:02:25 浏览: 22
假设我们有以下表结构:
学生表(student):
| id | name | age |
| ---- | ---- | --- |
| 1 | 张三 | 20 |
| 2 | 李四 | 19 |
| 3 | 王五 | 21 |
课程表(course):
| id | name |
| ---- | ----- |
| 001 | 语文 |
| 002 | 数学 |
| 003 | 英语 |
成绩表(score):
| id | student_id | course_id | score |
| ---- | ----------| ---------| ----- |
| 1 | 1 | 002 | 80 |
| 2 | 1 | 003 | 90 |
| 3 | 2 | 002 | 70 |
| 4 | 2 | 003 | 85 |
| 5 | 3 | 002 | 95 |
| 6 | 3 | 003 | 92 |
我们可以使用如下的SQL语句查询出所有及格的学生(不包括选修001课程):
```
SELECT s.id, s.name, s.age
FROM student s
INNER JOIN score sc ON s.id = sc.student_id
INNER JOIN course c ON sc.course_id = c.id
WHERE c.name != '001' AND sc.score >= 60
GROUP BY s.id, s.name, s.age
HAVING COUNT(*) = (SELECT COUNT(*) FROM course WHERE name != '001');
```
这个SQL语句的思路是先使用INNER JOIN关联三张表,筛选出选修了非001课程且成绩及格的学生。然后使用GROUP BY将结果按照学生id、姓名、年龄分组,再使用HAVING筛选出选修了所有非001课程的学生。最终输出学生的id、姓名、年龄信息。