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

T-SQL新手求助:使用SQL JOIN查询学生项目关联数据

嗨,作为T-SQL新手,咱们一步步来搞定这个JOIN查询的问题~首先得明确你这三个表的关联逻辑:StudentWork 是中间关联表,通过 ProjectID 关联 StudentProject 的主键 ID,通过 StudentID 关联 StudentName 的主键 ID。

不过你提供的插入语句不完整,我先补全并添加一些示例数据,这样咱们的查询能有实际结果参考:

补全并添加示例数据

-- 补全StudentProject的插入(修正日期格式为标准YYYY-MM-DD,避免歧义)
INSERT INTO StudentProject VALUES 
('Omega','2005-01-02'),
('KingOmega','2000-01-03'),
('Beast','2008-01-06');

-- 插入学生姓名示例数据
INSERT INTO StudentName VALUES 
('Alice'),
('Bob'),
('Charlie');

-- 插入学生作业关联数据
INSERT INTO StudentWork VALUES 
(1, 1), -- Alice参与Omega项目
(1, 2), -- Bob参与Omega项目
(3, 3); -- Charlie参与Beast项目

常用JOIN查询示例及结果

1. 内连接(INNER JOIN):只返回所有表都匹配的记录

这是最常用的场景,只显示有对应学生参与且存在的项目的作业记录:

SELECT 
    sp.ProjectName,
    sp.DueDate,
    sn.StudentName,
    sw.ID AS WorkRecordID
FROM StudentWork sw
INNER JOIN StudentProject sp ON sw.ProjectID = sp.ID
INNER JOIN StudentName sn ON sw.StudentID = sn.ID;

查询结果:

ProjectNameDueDateStudentNameWorkRecordID
Omega2005-01-02Alice1
Omega2005-01-02Bob2
Beast2008-01-06Charlie3

2. 左连接(LEFT JOIN):返回左表所有数据,匹配不上的字段显示NULL

如果你想查看所有项目,哪怕没有学生参与,可以用左连接(以StudentProject为左表):

SELECT 
    sp.ProjectName,
    sp.DueDate,
    sn.StudentName,
    sw.ID AS WorkRecordID
FROM StudentProject sp
LEFT JOIN StudentWork sw ON sp.ID = sw.ProjectID
LEFT JOIN StudentName sn ON sw.StudentID = sn.ID;

查询结果:

ProjectNameDueDateStudentNameWorkRecordID
Omega2005-01-02Alice1
Omega2005-01-02Bob2
KingOmega2000-01-03NULLNULL
Beast2008-01-06Charlie3

3. 右连接(RIGHT JOIN):返回右表所有数据,匹配不上的字段显示NULL

如果想查看所有学生,哪怕没有参与任何项目,可以用右连接(以StudentName为右表):

SELECT 
    sp.ProjectName,
    sp.DueDate,
    sn.StudentName,
    sw.ID AS WorkRecordID
FROM StudentWork sw
RIGHT JOIN StudentName sn ON sw.StudentID = sn.ID
LEFT JOIN StudentProject sp ON sw.ProjectID = sp.ID;

查询结果:

ProjectNameDueDateStudentNameWorkRecordID
Omega2005-01-02Alice1
Omega2005-01-02Bob2
Beast2008-01-06Charlie3

(如果后续添加没有参与项目的学生,比如INSERT INTO StudentName VALUES ('Dave');,查询结果里Dave对应的ProjectName、DueDate和WorkRecordID都会是NULL)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:34