mysql查询学过“张三”老师所教的所有课的同学的学号、姓名
封面图
•
2026-01-17
•
MySQL
318
0
0
0
要查询**学过“张三”老师所教的所有课的同学的学号、姓名**,我们需要先明确数据库结构。通常情况下,这种查询涉及以下几张表: ### 假设的数据库结构如下(根据常见设计): 1. **学生表(student)** - `student_id`:学号 - `student_name`:姓名 2. **课程表(course)** - `course_id`:课程编号 - `teacher_name`:任课教师姓名(例如“张三”) 3. **选课表(enroll)** - `student_id`:学号 - `course_id`:课程编号 --- ### 查询目标: 找出所有**选修了“张三”老师所教的所有课程**的学生。 --- ### SQL 查询语句如下: ```sql SELECT s.student_id, s.student_name FROM student s WHERE NOT EXISTS ( SELECT 1 FROM course c WHERE c.teacher_name = '张三' AND NOT EXISTS ( SELECT 1 FROM enroll e WHERE e.student_id = s.student_id AND e.course_id = c.course_id ) ); ``` --- ### 解释: - 外层查询遍历每个学生。 - 内层子查询检查是否有一门“张三”老师教的课程,该学生**没有选修**。 - 如果没有这样的课程(即学生选修了“张三”老师的所有课程),则这个学生会被选中。 --- ### 可选优化(如果使用 MySQL 8.0+): 也可以用 `GROUP BY` 和 `HAVING` 实现: ```sql SELECT s.student_id, s.student_name FROM student s JOIN enroll e ON s.student_id = e.student_id JOIN course c ON e.course_id = c.course_id WHERE c.teacher_name = '张三' GROUP BY s.student_id, s.student_name HAVING COUNT(DISTINCT e.course_id) = ( SELECT COUNT(*) FROM course WHERE teacher_name = '张三' ); ``` --- ### 说明: - 第一个查询是更通用的方式,适用于所有版本。 - 第二个查询效率可能更高,但需要确保 `course` 表中“张三”老师的课程数量是确定的。 --- 如果你能提供具体的表结构或字段名,我可以给出更准确的 SQL 语句。
上一篇:
MySQL中 left join
下一篇:
mysql查询没有学全所有课的学生的学号、姓名
标题录入,一次不能超过6条
留言
评论