EXISTS查询查询没有选修1号课程的学生的姓名
时间: 2023-11-24 20:10:50 浏览: 70
假设关系模式如下:
```
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号课程的学生姓名。
相关问题
sql找出选修了所有课程的学生号
根据提供的引用内容,有三种方法可以找出选修了所有课程的学生号:
方法一:使用子查询
```
SELECT sno FROM student WHERE sno NOT IN (SELECT sno FROM sc WHERE cno <> '1');```
方法二:使用EXISTS关键字
```
SELECT sno FROM student WHERE NOT EXISTS (SELECT * FROM course WHERE NOT EXISTS (SELECT * FROM sc WHERE sc.sno = student.sno AND sc.cno = course.cno));
```
方法三:使用INNER JOIN
```
SELECT s.sno FROM student s INNER JOIN sc ON s.sno = sc.sno GROUP BY s.sno HAVING COUNT(DISTINCT sc.cno) = (SELECT COUNT(*) FROM course);
```
查询被06010l学生选修,但没有被060102学生所选修的课程的课程号(用EXCEPT组合查询与NOT EXISTS嵌套子查询两种方法实现)
使用EXCEPT组合查询方法:
```
SELECT 课程号
FROM 选课表
WHERE 学号 = '06010l'
EXCEPT
SELECT 课程号
FROM 选课表
WHERE 学号 = '060102'
```
使用NOT EXISTS嵌套子查询方法:
```
SELECT DISTINCT 选课表1.课程号
FROM 选课表 AS 选课表1
WHERE 学号 = '06010l'
AND NOT EXISTS (
SELECT *
FROM 选课表 AS 选课表2
WHERE 选课表2.学号 = '060102'
AND 选课表1.课程号 = 选课表2.课程号
)
```