如何使用MySQL的NOT EXISTS子句查询从未选修过GG老师授课的课程的学生姓名?
时间: 2024-10-27 22:14:03 浏览: 34
在MySQL中,可以使用NOT EXISTS子句与FROM子查询结合来查找从未选修过GG老师授课的课程的学生。假设有一个名为`teacher_courses`的表,其中存储了教师及其授课课程信息,以及`student_courses`表记录学生的选课情况。下面是如何编写这样的查询:
```sql
SELECT s.name
FROM student s
WHERE NOT EXISTS (SELECT 1 FROM teacher_courses tc WHERE tc.teacher_name = 'GG' AND tc.course_id IN (SELECT course_id FROM student_courses WHERE student_courses.student_id = s.id))
```
这段SQL的意思是,从`student`表中选择那些在其对应的`student_courses`表中找不到对应GG老师授课课程的学生姓名。这里的`tc.teacher_name = 'GG' AND tc.course_id IN ...`是子查询部分,它找出GG老师的课程ID,然后外部的`NOT EXISTS`条件则确保这些课程ID不是学生已经选修过的。
相关问题
mysql中用WHERE exists查询选修了全部课程的学生姓名
以下是MySQL中用WHERE EXISTS查询选修了全部课程的学生姓名的示例:
```mysql
SELECT Sname FROM Student
WHERE NOT EXISTS (
SELECT Cno FROM Course
WHERE NOT EXISTS (
SELECT * FROM SC
WHERE SC.Sno = Student.Sno AND SC.Cno = Course.Cno
)
);
```
该查询语句的含义是:查询选修了全部课程的学生姓名。首先在学生表中选择学生姓名,然后使用NOT EXISTS子查询来查找每个学生是否选修了所有的课程。如果存在一个课程没有被选修,则该学生不会被包含在结果中。
EXISTS查询查询没有选修1号课程的学生的姓名
假设关系模式如下:
```
Student(Sid: string, Sname: string, Age: integer, Gender: string)
Course(Cid: string, Cname: string, Tid: string)
SC(Sid: string, Cid: string, Score: integer)
```
可以使用以下SQL语句进行查询:
```
SELECT Sname
FROM Student
WHERE Sid NOT IN (
SELECT Sid
FROM SC
WHERE Cid = '1'
)
```
这个查询的思路是先在SC表中查询选修了1号课程的所有学生,然后在Student表中排除这些学生,最后得到没有选修1号课程的学生姓名。
阅读全文