sql查询学过“孟扎扎”老师所教的所有课的同学的学号、姓名
时间: 2024-05-05 21:21:57 浏览: 76
查询数据库中所有有成绩的学生的学号和课程号
4星 · 用户满意度95%
假设有两个表,一个是学生表,一个是课程表,学生表包含学生的学号和姓名,课程表包含课程的课程号和课程名。另外还有一个成绩表,包含学生的学号、课程的课程号和学生成绩。可以使用以下 SQL 查询语句查询学过“孟扎扎”老师所教的所有课的同学的学号、姓名:
```sql
SELECT s.id, s.name
FROM student s
WHERE s.id IN (
SELECT sc.id
FROM score sc
INNER JOIN course c ON sc.course_id = c.id
WHERE c.teacher = '孟扎扎'
GROUP BY sc.id
HAVING COUNT(DISTINCT c.id) = (SELECT COUNT(*) FROM course WHERE teacher = '孟扎扎')
)
```
其中,`student` 表表示学生表,`score` 表表示成绩表,`course` 表表示课程表。`s.id` 和 `s.name` 分别表示学生的学号和姓名。`c.id` 和 `c.teacher` 分别表示课程的课程号和授课教师。`sc.id` 表示学生的学号,`sc.course_id` 表示学生所选的课程号。
该查询语句使用了子查询和聚合函数。首先,在子查询中查询所有学过“孟扎扎”老师所教的课程的学生的学号,然后使用 `IN` 子句将这些学生的学号作为条件查询学生表,获取学生的学号和姓名。在子查询中,使用 `INNER JOIN` 子句将成绩表和课程表连接,查询授课教师为“孟扎扎”的课程的课程号,然后使用 `GROUP BY` 子句将学生的学号分组,使用 `HAVING` 子句过滤掉未选修所有“孟扎扎”老师所教的课程的学生。
阅读全文