给定Student、SC、Course 三张表,请用集合查询选出没选C1和C2课程的学生学号(没选C1,同时没有选C2
时间: 2024-10-11 20:17:37 浏览: 87
《数据库系统概论》第三章例题 Student Course SC 三张 基础表 源代码
假设我们有三张表:
1. `Student` (学生表)
- `id` (学生ID,主键)
- `name` (学生姓名)
2. `SC` (选课表)
- `student_id` (学生ID,外键引用Student.id)
- `course_id` (课程ID)
- `status` (选课状态,如"选中"或"未选")
3. `Course` (课程表)
- `id` (课程ID,主键)
- `name` (课程名称,这里我们假设"C1"和"C2")
为了找出没有选修C1和C2课程的学生学号,你可以构造一个SQL查询,例如在MySQL或PostgreSQL中:
```sql
SELECT s.id
FROM Student s
LEFT JOIN SC sc ON s.id = sc.student_id AND sc.course_id IN ('C1', 'C2')
WHERE sc.id IS NULL;
```
这个查询做了两件事情:
1. LEFT JOIN: 将`Student`表与`SC`表通过`student_id`连接,如果学生没有选修C1或C2,则`sc.id`将为空(NULL)。
2. WHERE条件: 过滤出那些在关联结果中`sc.id`为空的学生,也就是他们没有选修C1或C2。
阅读全文