如何查询选修了所有课程的学生的学号和姓名以及选修的课程数?
时间: 2023-11-24 22:50:26 浏览: 83
以下是查询选修了所有课程的学生的学号和姓名以及选修的课程数的SQL语句:
```
SELECT student.学号, student.姓名, COUNT(*) AS 选修课程数
FROM student, sc
WHERE student.学号 = sc.学号
GROUP BY student.学号, student.姓名
HAVING COUNT(*) = (SELECT COUNT(*) FROM course)
```
解释:
首先使用学生表(student)和课程表(sc)进行连接,然后按照学号和姓名进行分组,统计每个学生选修的课程数。最后使用HAVING子句筛选出选修了所有课程的学生。
相关问题
MySQL查询所有没有选修课程的学生的学号、姓名
假设我们有以下两张表:
学生表 (students):
| 学号 | 姓名 |
| ---- | -----|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 4 | 赵六 |
选课表 (course_selections):
| 学号 | 课程编号 |
| ---- | -----|
| 1 | 1001 |
| 1 | 1002 |
| 2 | 1001 |
| 3 | 1003 |
则查询所有没有选修课程的学生的学号、姓名的SQL语句如下:
```
SELECT s.学号, s.姓名
FROM 学生表 s
LEFT JOIN 选课表 c ON s.学号 = c.学号
WHERE c.学号 IS NULL;
```
该语句使用了左连接(LEFT JOIN)将学生表和选课表连接起来,然后使用 WHERE 子句过滤出选修课程为空的记录,最后只查询学号和姓名两个字段。
查询所有没有选修课程的学生的学号、姓名
可以使用如下 SQL 语句查询所有没有选修课程的学生的学号、姓名:
```
SELECT student_id, student_name
FROM student
WHERE student_id NOT IN (
SELECT student_id
FROM course_selection
)
```
其中,`student` 表是学生信息表,包括 `student_id` 和 `student_name` 等字段;`course_selection` 表是选课信息表,包括 `student_id` 和 `course_id` 等字段。以上 SQL 语句的含义是:查询 `student` 表中所有学号和姓名,并且这些学号在 `course_selection` 表中不存在。