查询和"01"号的同学学习的课程完全相同的其他同学的信息 的sql语句怎么写
时间: 2024-03-25 17:41:19 浏览: 21
可以使用子查询和 `HAVING` 子句来实现:
```
SELECT *
FROM student
WHERE s_id <> '01' AND s_id IN (
SELECT s_id
FROM score
WHERE c_id IN (
SELECT c_id
FROM score
WHERE s_id = '01'
)
GROUP BY s_id
HAVING COUNT(DISTINCT c_id) = (
SELECT COUNT(DISTINCT c_id)
FROM score
WHERE s_id = '01'
)
);
```
该 SQL 查询首先在 `score` 表中找到和学生 '01' 学习的所有课程相同的其他学生,然后通过 `HAVING` 子句确保这些学生学习的所有课程都和学生 '01' 学习的课程完全相同,最后在 `student` 表中查找这些学生的信息。
需要注意的是,该 SQL 查询假设学生 '01' 学习的课程没有重复,如果有重复需要对子查询中的 `COUNT(DISTINCT c_id)` 改为 `COUNT(*)`。
相关问题
查询和"01"号的同学学习的课程完全相同的其他同学的信息 的sql语句
假设学生信息存储在表 student_info 中,课程信息存储在表 course_info 中,学生和课程之间的关系存储在表 student_course 中,其中 student_course 表包含两个字段 student_id 和 course_id,表示某个学生选修了某个课程。
以下是查询和 "01" 号同学学习的课程完全相同的其他同学的信息的 SQL 语句:
```
SELECT si.*
FROM student_info si
WHERE si.student_id <> '01' AND
NOT EXISTS (
SELECT 1
FROM student_course sc1
WHERE sc1.student_id = '01' AND
NOT EXISTS (
SELECT 1
FROM student_course sc2
WHERE sc2.student_id = si.student_id AND
sc2.course_id = sc1.course_id
)
)
```
该 SQL 语句使用了 NOT EXISTS 子查询来查找和 "01" 号学生选修的课程完全相同的其他学生。首先,外层查询选取了除了 "01" 号学生以外的所有学生信息。然后,在子查询中,我们首先选取了 "01" 号学生选修的所有课程,然后在内部嵌套了另一个 NOT EXISTS 子查询,用于找到选修了这些课程的其他学生。如果没有找到这样的学生,则外层查询选取了该学生的信息。最终,我们得到了和 "01" 号同学学习的课程完全相同的其他同学的信息。
用sql语句查询李飞倩同学学习的课程信息,包含学生的学号、姓名、课程号和课程名
假设你有如下的表:
**学生表 (student)**
| 学号 | 姓名 |
| --- | --- |
| 001 | 李飞倩 |
| 002 | 张三 |
| 003 | 李四 |
**课程表 (course)**
| 课程号 | 课程名 |
| --- | --- |
| 1001 | 数据库 |
| 1002 | 计算机网络 |
| 1003 | 编译原理 |
**选课表 (choose)**
| 学号 | 课程号 |
| --- | --- |
| 001 | 1001 |
| 001 | 1002 |
| 002 | 1003 |
| 003 | 1002 |
则可以使用如下的 SQL 语句查询李飞倩同学学习的课程信息:
```
SELECT student.学号, student.姓名, course.课程号, course.课程名
FROM student, course, choose
WHERE student.学号 = choose.学号
AND course.课程号 = choose.课程号
AND student.姓名 = '李飞倩';
```
这个 SQL 语句使用了多表联结,将学生表、课程表和选课表连接起来,然后通过 WHERE 子句筛选出李飞倩同学学习的课程信息。