查询没学过"张珊"老师讲授的任一门课程的学生姓名 查询到张珊老师讲的课程
时间: 2023-11-28 08:03:58 浏览: 70
这个问题和上一个问题是相反的,需要查询所有学过其他老师讲授的课程,但是没有学过张珊老师讲授的课程的学生姓名,并查询出张珊老师讲授的课程。假设我们有以下三张表:
1. 学生表(student):包含学生的信息,如学生ID、姓名等。
2. 课程表(course):包含课程的信息,如课程ID、课程名称等。
3. 教师表(teacher):包含教师的信息,如教师ID、姓名等。
这三张表之间可以通过两个中间表(选课表和授课表)来建立关联,中间表的结构如下:
4. 选课表(select_course):包含学生ID和课程ID,表示学生选了哪些课程。
5. 授课表(teach_course):包含教师ID和课程ID,表示教师讲授了哪些课程。
我们需要查询的是所有学过其他老师讲授的课程,但是没有学过张珊老师讲授的课程的学生姓名,并查询出张珊老师讲授的课程,那么我们可以按照以下步骤进行查询:
1. 首先,我们需要找到张珊老师所讲授的所有课程。假设张珊老师的教师ID为1,那么我们可以通过以下SQL语句查询到所有张珊老师讲授的课程:
```
SELECT course_id FROM teach_course WHERE teacher_id = 1;
```
2. 然后,我们需要查询所有学过其他老师讲授的课程,但是没有学过张珊老师讲授的课程的学生姓名。假设我们要查询的是学生姓名,那么我们可以通过以下SQL语句查询:
```
SELECT student.name FROM student WHERE student.id IN
(SELECT select_course.student_id FROM select_course
WHERE select_course.course_id IN
(SELECT teach_course.course_id FROM teach_course WHERE teach_course.teacher_id <> 1)
AND select_course.student_id NOT IN
(SELECT select_course.student_id FROM select_course
WHERE select_course.course_id IN
(SELECT teach_course.course_id FROM teach_course WHERE teach_course.teacher_id = 1)));
```
这条SQL语句的意思是:先查询出所有其他老师讲授的课程ID,然后在选课表中查询出学过这些课程但是没有学过张珊老师讲授的课程的学生ID,最后在学生表中查询出这些学生的姓名。
3. 最后,我们需要查询出张珊老师讲授的课程。假设我们要查询的是课程名称,那么我们可以通过以下SQL语句查询:
```
SELECT course.name FROM course WHERE course.id IN
(SELECT teach_course.course_id FROM teach_course WHERE teach_course.teacher_id = 1);
```
这条SQL语句的意思是:在授课表中查询出张珊老师讲授的课程ID,然后在课程表中查询出这些课程的名称。
这就是一个稍微复杂一些的多表关联查询的例子。希望能对你有所帮助。
阅读全文