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

基于示例表计算SQL左/右/内连接返回行数并理解join原理

SQL自连接行数计算及原理解析

你提供的原始测试表数据如下:

col_acol_b
00
10
00
11
11
20

我们先统计每个关联键组合(col_a, col_b)的出现次数:

  • (0,0):共2行
  • (1,0):共1行
  • (1,1):共2行
  • (2,0):共1行

本次测试的自连接语句通用格式为(表名设为t):

-- 内连接
SELECT * FROM t t1 INNER JOIN t t2 ON t1.col_a = t2.col_a AND t1.col_b = t2.col_b;
-- 左连接
SELECT * FROM t t1 LEFT JOIN t t2 ON t1.col_a = t2.col_a AND t1.col_b = t2.col_b;
-- 右连接
SELECT * FROM t t1 RIGHT JOIN t t2 ON t1.col_a = t2.col_a AND t1.col_b = t2.col_b;

三种连接的返回行数

1. 内连接(INNER JOIN)

内连接规则是仅保留左右表关联键完全匹配的行,每个关联键组合的返回行数为「左表该键的行数 × 右表该键的行数」。
计算过程:
2×2 + 1×1 + 2×2 + 1×1 = 4+1+4+1 = 10行
最终返回行数:10

2. 左连接(LEFT JOIN)

左连接规则是保留左表的所有行,右表没有匹配的行对应位置补NULL。
由于本次是同表自连接,左表所有的关联键组合在右表都存在,不存在匹配失败的情况,因此返回行数和内连接一致。
最终返回行数:10

3. 右连接(RIGHT JOIN)

右连接规则是保留右表的所有行,左表没有匹配的行对应位置补NULL。
同理,因为是同表自连接,右表所有的关联键组合在左表都存在,没有匹配失败的情况,返回行数和内连接、左连接一致。
最终返回行数:10

核心原理补充

如果不是自连接,左右表的关联键组合不完全重合的情况下,三种连接的行数会有明显差异:

  • 内连接:仅保留两边都存在的键的匹配结果
  • 左连接:内连接结果 + 左表有、右表没有的键对应的行(右表字段补NULL)
  • 右连接:内连接结果 + 右表有、左表没有的键对应的行(左表字段补NULL)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:01