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

如何在SQL Server中使用Join子句返回两表查询结果?附示例

分析SQL Server中RIGHT JOIN查询的逻辑及完整结果

咱们来一步步拆解这个SQL查询的逻辑,看看它到底返回了什么结果,以及背后的原因。

1. 表结构与测试数据

首先先明确两张表的结构和插入的测试数据:

Figure表(存储月度统计数据)

CREATE TABLE Figure(
    MonthNumber varchar(10),
    Code varchar(10),
    Figure int
);

INSERT INTO Figure (MonthNumber, Code, Figure)
VALUES 
    ('5', 'S', '25'),
    ('5','G', '30'),
    ('4','K', '30');

Person表(存储人员编码)

CREATE TABLE Person(
    Code varchar(10)
);

INSERT INTO Person (Code)
VALUES ('S'), ('G'), ('K'), ('D'), ('J');

2. 执行的查询语句

SELECT 
    F.[MonthNumber], 
    F.[Code], 
    F.[Figure]
FROM Figure F
RIGHT JOIN Person P ON F.[Code] = P.[Code]
WHERE F.[MonthNumber] = '5'

3. 查询逻辑分析

这里的核心是RIGHT JOIN和WHERE条件的组合作用,咱们拆开来看:

  • RIGHT JOIN Person:原本的作用是保留Person表中的所有行,同时匹配Figure表中Code相同的行;如果Person中的Code在Figure里没有对应数据,Figure的列会显示为NULL。
  • WHERE F.[MonthNumber] = '5':这个条件会过滤掉所有MonthNumber不等于'5'的行,包括那些MonthNumber为NULL的行(因为NULL和任何值比较都不成立)。

结合两者的效果:

  • Person中的S:在Figure里有MonthNumber='5'的记录,符合条件,会被保留。
  • Person中的G:同样在Figure里有MonthNumber='5'的记录,符合条件,会被保留。
  • Person中的K:在Figure里对应的MonthNumber是'4',不符合WHERE条件,被过滤。
  • Person中的D和J:在Figure里没有任何匹配记录,所以F.MonthNumber是NULL,不满足='5'的条件,也被过滤。

4. 完整查询结果

最终返回的结果如下:

MonthNumberCodeFigure
5S25
5G30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:05:34