查找选修了三门课程的同学学号和姓名(使用in和exists两种语句)
时间: 2024-02-05 18:03:01 浏览: 35
使用 `IN` 语句:
```sql
SELECT 学号, 姓名
FROM 学生
WHERE 学号 IN (
SELECT 学号
FROM 选课
GROUP BY 学号
HAVING COUNT(*) = 3
)
```
使用 `EXISTS` 语句:
```sql
SELECT 学号, 姓名
FROM 学生 s
WHERE EXISTS (
SELECT *
FROM 选课 c
WHERE c.学号 = s.学号
GROUP BY 学号
HAVING COUNT(*) = 3
)
```
以上两种语句均可以查询选修了三门课程的同学的学号和姓名。
相关问题
数据库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语句中 查询选修了全部课程的学生的学号和姓名
可以使用如下的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语句的意思是:查询所有的学生的学号和姓名,但是要求这些学生选修了所有的课程(即不存在任何一门课程没有被选修)。