You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:07:50