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

技术需求:查询学生姓名及对应导师姓名,排除无学生的导师

这题我熟,咱们一步步来解决!

表结构

先把你给出的表整理成更清晰的Markdown表格:

students表

student_idfirst_namelast_nameadvisor_id
1TanishaBlake2
2JessGoldsmithNULL
3TracyWu3
4AlvinGrand1
5FelixZimmermann2

Advisors表

advisor_idfirst_namelast_name
1JamesFrancis
2AmyCheng
3LamarAlexander
4AnitaWoods

需求分析

我们需要:

  1. 获取所有学生的姓名(first_name、last_name)
  2. 显示对应导师的姓名(如果有的话)
  3. 排除那些没有分配任何学生的导师(比如Anita Woods,没有学生关联她的advisor_id=4)

SQL查询语句

方案1:保留所有学生(包括无导师的)

这个方案会展示所有学生,无导师的学生对应的导师字段会显示为NULL,同时自动排除无学生的导师:

SELECT
    s.first_name AS student_first_name,
    s.last_name AS student_last_name,
    a.first_name AS advisor_first_name,
    a.last_name AS advisor_last_name
FROM
    students s
LEFT JOIN
    advisors a ON s.advisor_id = a.advisor_id;

语句解释:

  • 使用LEFT JOIN(左连接)是以students表为主表,确保所有学生记录都被保留,哪怕没有匹配的导师。
  • 因为是从学生表关联导师表,那些没有学生的导师(比如Anita)不会出现在结果集中,完美满足“排除未分配学生的导师”的要求。
  • 给字段起别名是为了让结果列名更直观,避免混淆学生和导师的姓名。

方案2:只保留有导师的学生

如果你只需要展示已经分配了导师的学生,同时排除无学生的导师,可以用INNER JOIN(内连接):

SELECT
    s.first_name AS student_first_name,
    s.last_name AS student_last_name,
    a.first_name AS advisor_first_name,
    a.last_name AS advisor_last_name
FROM
    students s
INNER JOIN
    advisors a ON s.advisor_id = a.advisor_id;

语句解释:

  • INNER JOIN只会保留两张表中匹配的记录,也就是只有分配了导师的学生才会被显示,同时无学生的导师也不会出现在结果里。

内容的提问来源于stack exchange,提问作者Amrut Hunashyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:15:10