SQL技术问询:查询学生已选修课程及获取选课学生对应课程描述的实现问题
学生选修课程相关SQL查询解决方案
需求1:查看学生已选修的所有课程
如果要列出所有学生各自已选修的课程信息,我们需要把学生表、选课表、班级表和课程表关联起来,这样就能同时拿到学生信息和对应的课程详情:
SELECT s.STUDENT_ID, s.FIRST_NAME, s.LAST_NAME, c.COURSE_NO, c.DESCRIPTION AS 课程描述 FROM STUDENT s INNER JOIN ENROLLMENT e ON s.STUDENT_ID = e.STUDENT_ID INNER JOIN SECTION sec ON e.SECTION_ID = sec.SECTION_ID INNER JOIN COURSE c ON sec.COURSE_NO = c.COURSE_NO ORDER BY s.STUDENT_ID, c.COURSE_NO;
要是只需要查看某个特定学生(比如学生ID为1)的已选修课程,只要在SQL末尾加上WHERE s.STUDENT_ID = 1;就行啦。
需求2:查询已选修课程的学生对应的课程DESCRIPTION
先帮你捋捋你尝试代码里的几个小问题:
- 你给SECTION表起的别名是
c,但后面用了c.ID,可SECTION表的主键是SECTION_ID,不是ID,这会直接导致字段不存在的报错 - 你的查询没有关联到COURSE表,自然拿不到课程的
DESCRIPTION字段 - 你选的
c.SECTION_ID其实是班级ID,并不是你需要的课程描述内容
下面是针对性的正确SQL写法:
情况1:查看所有已选课学生及其对应的课程描述
SELECT s.STUDENT_ID, s.FIRST_NAME, s.LAST_NAME, c.DESCRIPTION AS COURSE_DESCRIPTION FROM STUDENT s INNER JOIN ENROLLMENT e ON s.STUDENT_ID = e.STUDENT_ID INNER JOIN SECTION sec ON e.SECTION_ID = sec.SECTION_ID INNER JOIN COURSE c ON sec.COURSE_NO = c.COURSE_NO ORDER BY s.STUDENT_ID;
情况2:查看某个特定学生(比如ID=1)选修的所有课程描述(去重)
如果这个学生选了同一门课的多个班级,你可能需要去重,用DISTINCT就能实现:
SELECT DISTINCT c.DESCRIPTION AS COURSE_DESCRIPTION FROM ENROLLMENT e INNER JOIN SECTION sec ON e.SECTION_ID = sec.SECTION_ID INNER JOIN COURSE c ON sec.COURSE_NO = c.COURSE_NO WHERE e.STUDENT_ID = 1;
内容的提问来源于stack exchange,提问作者Brian Brown
相关产品推荐
相关产品推荐

