mysql实现查询至少选修了学生20180002选修的全部课程的学生的学号
时间: 2024-11-22 11:39:21 浏览: 29
学生课程实验 使用QT+Mysql 实现学生选课管理系统
在MySQL中,你可以使用子查询、JOIN操作以及GROUP BY和HAVING语句来完成这样的查询。假设我们有两个表,一个是`students`,包含学生的`student_id`和选课信息;另一个是`courses`,包含课程的`course_id`和学生ID (`student_ids`)。这里是一个基本的SQL查询示例:
```sql
SELECT s.student_id
FROM students s
JOIN (
SELECT course_id, GROUP_CONCAT(student_id) AS student_ids
FROM courses c
WHERE student_id IN (SELECT student_id FROM students WHERE student_number = '20180002')
GROUP BY course_id
) subquery ON s.student_id IN (subquery.student_ids)
GROUP BY s.student_id
HAVING COUNT(DISTINCT subquery.course_id) = (
SELECT COUNT(*)
FROM (
SELECT DISTINCT course_id
FROM courses
WHERE student_id IN (SELECT student_id FROM students WHERE student_number = '20180002')
) sub_subquery
);
```
这个查询首先从`courses`表中找出20180002学生选过的所有课程(`course_id`s),然后在主表`students`中查找这些课程的所有学生。最后,GROUP BY 和 HAVING 保证返回的是那些选择了所有这些课程的学生。
阅读全文