mysql查询与选修了某学生所选全部课程的学生
时间: 2023-11-24 17:09:16 浏览: 300
如果我们已知该学生的ID,假设为`student_id`,可以使用以下 SQL 语句查询选修了该学生所选全部课程的学生:
```
SELECT DISTINCT s2.student_id
FROM student_course s1
JOIN student_course s2 ON s1.course_id = s2.course_id
WHERE s1.student_id = <student_id> AND s2.student_id <> <student_id>;
```
其中,`student_course` 表记录了学生选修课程的信息,包括学生ID和课程ID。这个查询使用了自连接(self-join),将选修了同一门课程的学生连接起来,并通过限制其中一个学生的ID为`student_id`,查找选修了该学生所选全部课程的学生。最终使用 DISTINCT 关键字去重,确保结果中没有重复的学生ID。
相关问题
mysql查询学生所选修的全部课程_查询选修了全部课程的学生姓名
查询学生所选修的全部课程:
```mysql
SELECT s.name, c.course_name
FROM student s
JOIN student_course sc ON s.id = sc.student_id
JOIN course c ON sc.course_id = c.id
WHERE s.id = [学生ID];
```
查询选修了全部课程的学生姓名:
```mysql
SELECT s.name
FROM student s
JOIN student_course sc ON s.id = sc.student_id
JOIN course c ON sc.course_id = c.id
GROUP BY s.id
HAVING COUNT(DISTINCT c.id) = (SELECT COUNT(*) FROM course);
```
这里使用了子查询来获取全部课程的数量,再通过 GROUP BY 和 HAVING 子句来筛选选修了全部课程的学生。
mysql实现查询至少选修了学生20180002选修的全部课程的学生的学号
在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 保证返回的是那些选择了所有这些课程的学生。
阅读全文