sql语句求选修课程超过2门的学生的学号和姓名
时间: 2024-05-14 22:15:38 浏览: 282
假设有两个表:一个是学生表,包含学生的学号和姓名;另一个是选课表,包含学生的选课信息。
可以使用以下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门的学生。
相关问题
T-sql语句查询选修了991102号学生选修了的课程的学生学号和姓名
好的,以下是对应的 T-SQL 查询语句:
```
SELECT s.学号, s.姓名
FROM 学生 s
INNER JOIN 选课 x ON s.学号 = x.学号
WHERE x.课程号 = '991102'
```
解释一下,这个查询语句使用 INNER JOIN 连接了学生表(student)和选课表(select_course),通过学号来关联两个表。然后在 WHERE 子句中指定课程号为 '991102',从而筛选出选修了该门课程的学生。最后 SELECT 子句中选择了学号和姓名两个字段进行输出。
用sql语句求至少选修了“200215121”学生所选修的全部课程的学生学号和姓名。
假设学生表为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”学生所选修的全部课程的学生。
阅读全文