数据库SQL语句中 查询选修了全部课程的学生的学号和姓名
时间: 2023-11-24 11:24:08 浏览: 65
可以使用如下的SQL语句查询选修了全部课程的学生的学号和姓名:
```
SELECT student.id, student.name
FROM student
WHERE NOT EXISTS (
SELECT course.id
FROM course
WHERE NOT EXISTS (
SELECT *
FROM sc
WHERE sc.sid = student.id AND sc.cid = course.id
)
);
```
这个SQL语句的意思是:查询所有的学生的学号和姓名,但是要求这些学生选修了所有的课程(即不存在任何一门课程没有被选修)。
相关问题
数据库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表示全部课程的数量。只有当一个学生选修的不同课程数量等于全部课程数量时,该学生才被视为选修了全部课程。
)查询没有选修课程的学生学号,姓名用sql语句
可以使用左连接和 IS NULL 来解决这个问题。以下是一种可能的 SQL 语句:
```
SELECT s.sno, s.sname
FROM student s
LEFT JOIN score sc ON s.sno = sc.sno
WHERE sc.cno IS NULL
```
这个查询语句会从学生表和成绩表中进行左连接,找出没有成绩记录的学生,也就是没有选修过课程的学生。其中,LEFT JOIN 会保留左表(学生表)中所有记录,即使在右表(成绩表)中没有匹配的记录。然后,WHERE 子句过滤出没有成绩记录的学生,即成绩表中的课程号是 NULL 的记录。