mysql查询选修课程1的学生集合和选修2号课程学生集合的差集的语句
时间: 2024-10-23 09:10:36 浏览: 72
SQL的集合操作——差-结构化查询语言
在MySQL中,你可以使用子查询和UNION来获取选修课程1的学生集合和选修课程2的学生集合的差集。假设我们有两个表,一个是`students`表,包含学生的ID(student_id);另一个是`courses`表,记录学生选课的信息,包括课程编号(course_id)和学生ID(student_id)。
首先,我们需要找出只选修了课程1的学生集合(set1),然后再找出只选修了课程2的学生集合(set2)。最后,通过UNION ALL操作并排除交集来得到差集。
```sql
-- 获取选修课程1的学生集合
SELECT student_id
FROM students
WHERE student_id IN (SELECT student_id FROM courses WHERE course_id = 1);
-- 获取选修课程2的学生集合
SELECT student_id
FROM students
WHERE student_id IN (SELECT student_id FROM courses WHERE course_id = 2);
-- 计算差集
(SELECT student_id FROM (SELECT * FROM (
SELECT student_id
FROM students
WHERE student_id IN (SELECT student_id FROM courses WHERE course_id = 1)
) AS set1
EXCEPT
SELECT student_id
FROM students
WHERE student_id IN (SELECT student_id FROM courses WHERE course_id = 2))
AS diff;
```
这个查询会返回只选择了课程1而没有选择课程2的学生集合。注意,这里假设每个学生在一个课程中只有一个记录。
阅读全文