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

MySQL多对多关系查询:获取学生所选课程及指定ID课程名称

嘿,刚入门MySQL就啃多对多关系,这可是面试里的常客,选得好!咱们对着你给出的三张表,一步步搞定这两个查询需求~

先确认下三张表的核心结构(避免理解偏差):

  • Student表:存学生基本信息,主键为student_id
  • Courses表:存课程信息,主键为course_id
  • Student_Courses:中间关联表,靠student_id和course_id的组合关联学生与课程,这两个字段一般设为联合主键

需求1:查询某学生所选的所有课程

这里的“某学生”可以通过姓名或studentID定位,两种场景的写法都给你:

按学生姓名查询

SELECT c.*  -- *返回课程所有字段,也可指定具体字段如`course_id, course_name`
FROM Student s
INNER JOIN Student_Courses sc ON s.student_id = sc.student_id
INNER JOIN Courses c ON sc.course_id = c.course_id
WHERE s.name = '张三';  -- 替换为目标学生姓名

按学生ID查询(更精准,避免姓名重复)

SELECT c.*
FROM Student_Courses sc
INNER JOIN Courses c ON sc.course_id = c.course_id
WHERE sc.student_id = 1001;  -- 替换为目标学生ID

逻辑说明:多对多关系的核心是中间表Student_Courses,它是学生和课程之间的桥梁。用INNER JOIN能确保只返回该学生实际选过的课程,不会出现无关联的无效数据。


需求2:给定studentID,返回该学生所选的所有课程名称

这是需求1的简化版,只需要提取课程名称,调整SELECT字段即可:

SELECT c.course_name
FROM Student_Courses sc
INNER JOIN Courses c ON sc.course_id = c.course_id
WHERE sc.student_id = 1001;

如果想更严谨(防止关联表中存在无效的studentID),可以加上与Student表的关联校验:

SELECT c.course_name
FROM Student s
INNER JOIN Student_Courses sc ON s.student_id = sc.student_id
INNER JOIN Courses c ON sc.course_id = c.course_id
WHERE s.student_id = 1001;

小拓展:面试里还可能延伸类似问题,比如“查询没有选任何课程的学生”“查询某门课程的所有学生”,核心逻辑都是用JOIN/LEFT JOIN配合WHERE条件,你可以顺着这个思路多练练~

内容的提问来源于stack exchange,提问作者Zack King

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:49:31