mysql中查询没有选修学号20121522学生选修的全部课程的学生姓名
时间: 2023-11-10 10:34:15 浏览: 37
可以使用以下 SQL 语句查询没有选修学号为20121522的学生选修的全部课程的学生姓名:
SELECT DISTINCT s.name
FROM student s
WHERE s.sno NOT IN
(SELECT sc.sno
FROM score sc
WHERE sc.cno NOT IN
(SELECT cno
FROM course
WHERE cname IN
(SELECT cname
FROM course
WHERE cno IN
(SELECT cno
FROM score
WHERE sno = '20121522'))));
相关问题
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 子句过滤出选修课程为空的记录,最后只查询学号和姓名两个字段。
mysql用关系代数查询选修了全部课程的学生的学号
假设有两个表:学生表(student)和选课表(course),学生表中包含学生的基本信息,选课表中包含学生选修的课程信息。
首先,我们需要找到所有选修了课程的学生,可以通过查询选课表中所有课程的交集得到:
```
SELECT student_id
FROM course
GROUP BY student_id
HAVING COUNT(DISTINCT course_id) = (SELECT COUNT(*) FROM course);
```
上述语句中,`COUNT(DISTINCT course_id)` 统计了每个学生选修的不同课程数,`SELECT COUNT(*) FROM course` 统计了总共有多少门课程,如果这两个数相等,则说明该学生选修了所有课程。
接下来,我们需要将上述查询结果和学生表进行连接,以获取选修了全部课程的学生的学号:
```
SELECT s.id
FROM student s
INNER JOIN (
SELECT student_id
FROM course
GROUP BY student_id
HAVING COUNT(DISTINCT course_id) = (SELECT COUNT(*) FROM course)
) c
ON s.id = c.student_id;
```
上述语句中,`INNER JOIN` 将学生表和上述查询结果进行连接,`ON s.id = c.student_id` 表示连接条件为学生表中的学生ID和上述查询结果中的学生ID相等。最终,查询结果为选修了全部课程的学生的学号。