返回一组值的基于集合的子查询 使用sql语句查询 使用IN谓词查询所有学生都没有选修的课程编号和课程名
时间: 2023-12-14 20:38:24 浏览: 80
【3.18数据库作业8】SQL练习8 – SELECT(嵌套查询EXISTS、集合查询、基于派生表的查询)
5星 · 资源好评率100%
假设有两张表,一张是学生表(students),包含学生编号和学生姓名两个字段;另一张是选课表(courses),包含学生编号和课程编号两个字段。
使用子查询,可以先通过课程表(courses)查询出所有已选课程的课程编号,然后在学生表(students)中查询出所有未选过这些课程的学生。
SQL语句如下:
```
SELECT course_id, course_name
FROM courses
WHERE course_id NOT IN (
SELECT DISTINCT course_id
FROM courses
)
```
解释一下:
首先执行子查询 `SELECT DISTINCT course_id FROM courses`,这个子查询会返回一个包含所有已选课程编号的结果集。
然后在外部查询中,使用 `NOT IN` 谓词查询所有未选过这些课程的课程编号和课程名。这里的 `NOT IN` 表示排除掉已选过这些课程的学生。
注意,这里使用了 `DISTINCT` 关键字,是为了去除重复的课程编号。如果不加 `DISTINCT`,查询结果可能会出现重复的课程编号。
阅读全文