在“sc”表中查询选修了两门及以上课程的学生学号和选课数
时间: 2024-02-03 11:12:21 浏览: 44
查询语句如下:
```
SELECT sc.sno, COUNT(*) as num
FROM sc
GROUP BY sc.sno
HAVING COUNT(*) >= 2;
```
解释:
首先从 `sc` 表中选取学号 `sno` 和对应的选课成绩信息,然后按照学号分组,统计每个学生选课数目(即分组后每个学生对应的记录数),并将其命名为 `num`。最后通过 `HAVING` 子句筛选出选课数目大于等于 2 的学生,即选修了两门及以上课程的学生。
相关问题
使用select语句查询选修课程超过2 门课的学生学号和姓名
可以使用如下的SELECT语句来查询选修课程超过2门课的学生学号和姓名:
```
SELECT student.st_id, student.st_name
FROM student
INNER JOIN select_course ON student.st_id = select_course.sc_id
GROUP BY student.st_id, student.st_name
HAVING COUNT(*) > 2;
```
这条SELECT语句使用了INNER JOIN连接student表和select_course表,以获取学生选课的信息。然后使用GROUP BY子句按学生的学号和姓名分组,并使用HAVING子句筛选出选修课程超过2门的学生。最后,SELECT子句返回学生的学号和姓名。
需要注意的是,为了正确地统计每个学生选修的课程数量,必须使用GROUP BY子句对学生的学号和姓名进行分组。同时,由于只需要返回学生的学号和姓名,因此可以省略掉SELECT语句中的其他列。
数据库SQL语句中 查询选修了全部课程的学生的学号和姓名,请提供两种写法
当查询选修了全部课程的学生的学号和姓名时,可以提供以下两种SQL语句的写法。
第一种写法:
```
SELECT S.id, S.name
FROM student S
WHERE NOT EXISTS (
SELECT *
FROM course C
WHERE NOT EXISTS (
SELECT *
FROM sc
WHERE sc.sid = S.id AND sc.cid = C.id
)
);
```
这个SQL语句首先查询学生表中的学生ID和姓名,然后在学生表中使用NOT EXISTS子查询来查找那些没有选修某门课程的学生,最后返回选修了全部课程的学生ID和姓名。
第二种写法:
```
SELECT S.id, S.name
FROM student S
INNER JOIN sc ON S.id = sc.sid
GROUP BY S.id, S.name
HAVING COUNT(DISTINCT sc.cid) = (
SELECT COUNT(*)
FROM course
);
```
这个SQL语句使用内连接将学生表和选课表进行连接,然后按学生ID和姓名进行分组,使用HAVING子句筛选出选修了全部课程的学生ID和姓名。其中,COUNT(DISTINCT sc.cid)表示每个学生选修的不同课程数量,SELECT COUNT(*) FROM course表示全部课程的数量。只有当一个学生选修的不同课程数量等于全部课程数量时,该学生才被视为选修了全部课程。