使SQL server查询每一门课的间接选修课(即选修课的选修课)
时间: 2023-06-13 09:03:54 浏览: 190
假设有一个名为Course的表格,其中包含以下列:
- id:课程ID
- name:课程名称
- prerequisite_id:先修课程ID
则可以使用以下SQL查询来获取每门课的间接选修课:
```
SELECT DISTINCT c2.name
FROM Course c1
JOIN Course c2 ON c1.prerequisite_id = c2.id
WHERE c1.prerequisite_id IS NOT NULL
```
该查询会将课程表格自我连接,查询出所有的间接选修课程。首先,查询会找到所有有先修课程的课程,然后将它们与其他课程进行连接,从而获得它们的间接选修课程。最后,使用DISTINCT关键字去重,以避免重复的课程名称。
相关问题
使用sql语言,查询没有一门课是这个学生不选的
假设有三个表:`students`(学生表)、`courses`(课程表)和`scores`(成绩表),其中`students`表和`courses`表的关系为多对多,`scores`表与`students`表和`courses`表分别有外键关联。
可以使用以下 SQL 语句查询没有一门课是这个学生不选的学生:
```
SELECT s.name
FROM students s
WHERE NOT EXISTS (
SELECT c.id
FROM courses c
WHERE NOT EXISTS (
SELECT sc.student_id
FROM scores sc
WHERE sc.student_id = s.id AND sc.course_id = c.id
)
);
```
该查询语句的意思是,查询所有的学生 `s.name`,其中不存在一门课程 `c.id`,使得该学生没有选修这门课程。
用SQL语句查询至少选修了一门其直接先行课为5号课程的学生的姓名。
我可以回答这个问题。SQL语句如下:
SELECT DISTINCT S.name
FROM student S, sc SC
WHERE S.s_id = SC.s_id
AND SC.c_id IN (SELECT prereq_id
FROM course
WHERE course_id = '5')
这条SQL语句将联结student表和sc表来查询至少选修了一门其直接先行课为5号课程的学生的姓名,并使用DISTINCT保证不重复。