用连接查询查询信息系(IS)学生选修的课程名
时间: 2024-03-01 20:50:50 浏览: 23
好的,以下是查询语句:
```sql
SELECT DISTINCT course.course_name
FROM course
INNER JOIN stu_course ON course.course_id = stu_course.course_id
INNER JOIN student ON stu_course.stu_id = student.stu_id
WHERE student.major = '信息系';
```
解释一下这个查询语句:
首先我们需要查询出所有学习信息系专业的学生的 ID,然后再查询这些学生所选修的课程的 ID,最后再根据课程 ID 查询出课程名称。
这个查询语句中我们使用了两个 INNER JOIN 进行表连接,连接条件分别是 course_id 相等和 stu_id 相等。然后我们使用 WHERE 子句过滤出所有学习信息系专业的学生所选修的课程的名称。
最后,我们使用 DISTINCT 关键字去重,查询出所有选修过信息系课程的学生所选修的课程的名称。
相关问题
使用相关子查询查询信息系(IS)学生选修的课程名
好的,以下是查询语句:
```sql
SELECT DISTINCT course.course_name
FROM course
INNER JOIN stu_course ON course.course_id = stu_course.course_id
WHERE stu_course.stu_id IN (
SELECT student.stu_id
FROM student
WHERE student.major = '信息系'
);
```
解释一下这个查询语句:
首先我们需要查询出所有学习信息系专业的学生的 ID,然后再查询这些学生所选修的课程的 ID,最后再根据课程 ID 查询出课程名称。
这个查询语句中包含了一个子查询:
```sql
SELECT student.stu_id
FROM student
WHERE student.major = '信息系'
```
用来查询所有信息系专业的学生的 ID。
然后我们使用 INNER JOIN 将 course 表和 stu_course 表连接起来,连接条件是 course_id 相等。然后我们使用 WHERE 子句过滤出所有选修过信息系课程的学生的 ID。
最后,我们使用 DISTINCT 关键字去重,查询出所有选修过信息系课程的学生所选修的课程的名称。
查询没有学生的选修的课程及课程名
假设有两个表,一个是学生表,一个是选课表。学生表中包含学生的信息,选课表中包含学生选课的信息,包括选课的学生ID和相应的课程ID。
我们可以使用左连接(LEFT JOIN)来查询没有学生选修的课程及课程名。具体的 SQL 语句如下所示:
```
SELECT course.course_id, course.course_name
FROM course
LEFT JOIN student_course
ON course.course_id = student_course.course_id
WHERE student_course.course_id IS NULL;
```
解释一下,首先从课程表中选出课程ID和课程名,然后使用左连接将选课表与课程表进行关联,关联条件是课程ID相同。如果一个课程没有学生选修,那么在选课表中对应的记录就不存在,因此使用 WHERE 子句过滤出 student_course.course_id 为 NULL 的记录,即没有学生选修的课程。