用sql语句求至少选修了“200215121”学生所选修的全部课程的学生学号和姓名。
时间: 2023-11-10 15:51:41 浏览: 120
假设学生表为students,课程表为courses,选课表为selections,可以使用以下SQL语句:
```
SELECT s.sid, s.sname
FROM students s
WHERE NOT EXISTS (
SELECT c.cid
FROM courses c
WHERE NOT EXISTS (
SELECT *
FROM selections sel
WHERE sel.sid = s.sid AND sel.cid = c.cid AND sel.score IS NOT NULL
) AND c.cid IN (
SELECT sel.cid
FROM selections sel
WHERE sel.sid = '200215121' AND sel.score IS NOT NULL
)
);
```
解释一下这个SQL语句的思路:
首先从学生表中选择学号和姓名,然后使用NOT EXISTS子查询筛选出所有选修了“200215121”学生所选修的全部课程的学生,具体的做法是:
1. 在课程表中找出所有这些课程,并且排除掉没有被这些学生选修的课程;
2. 对于剩下的课程,查看是否有这些学生没有选修过的课程,如果存在这样的课程,说明这个学生不符合要求,需要被排除掉。
最终,只剩下选修了“200215121”学生所选修的全部课程的学生。
相关问题
用sql语句求至少选修了学号为“200215121”的学生所选修全部课程的学生学号和姓名。
假设有三张表:学生表(students)、课程表(courses)和选课表(select_courses)。
可以通过以下 SQL 语句实现:
```
SELECT s.student_id, s.student_name
FROM students s
WHERE NOT EXISTS (
SELECT c.course_id
FROM courses c
WHERE NOT EXISTS (
SELECT sc.course_id
FROM select_courses sc
WHERE sc.course_id = c.course_id
AND sc.student_id = s.student_id
)
AND c.course_id IN (
SELECT sc.course_id
FROM select_courses sc
WHERE sc.student_id = '200215121'
)
);
```
该 SQL 语句的思路是,首先在学生表中找到所有选修了学号为“200215121”的学生,然后排除掉这些学生未选修的课程,最后剩下的就是选修了全部课程的学生。
sql语句求选修课程超过2门的学生的学号和姓名
假设有两个表:一个是学生表,包含学生的学号和姓名;另一个是选课表,包含学生的选课信息。
可以使用以下SQL语句查询选修课程超过2门的学生的学号和姓名:
```
SELECT s.学号, s.姓名
FROM 学生表 s
INNER JOIN 选课表 c ON s.学号 = c.学号
GROUP BY s.学号, s.姓名
HAVING COUNT(c.课程号) > 2;
```
其中,`INNER JOIN`用于连接两个表,`GROUP BY`用于将结果按照学生分组,`HAVING`用于筛选选修课程超过2门的学生。
阅读全文