基于含重复值的给定数据集,求Inner、Left、Right、Full Join的行数
自连接操作后的行数计算(连接条件:
Col1 = Col2) 原表基础统计
以下计算基于该表与自身进行连接,连接条件为 a.Col1 = b.Col2。原表共11行,各字段值的出现频次:
Col1频次:1(1次)、2(1次)、3(3次)、4(2次)、5(1次)、6(2次)、7(1次)Col2频次:1(2次)、2(3次)、4(1次)、6(1次)、7(1次)、8(2次)、9(1次)
各连接结果行数
1. Inner Join(内连接)
只保留左右表能匹配的行,计算所有匹配组合的数量:
Col1=1匹配Col2=1的2行 → 1×2=2行Col1=2匹配Col2=2的3行 →1×3=3行Col1=4匹配Col2=4的1行 →2×1=2行Col1=7匹配Col2=7的1行 →1×1=1行- 其余
Col1值(3、5、6)在Col2中无对应值,贡献0行
总行数:2+3+2+1=8行
2. Left Join(左连接)
保留左表所有行,右表匹配不到则补NULL。行数为左表每行的匹配数之和(匹配不到的行算1行):
Col1=1:2行;Col1=2:3行;Col1=3:3行(无匹配,保留原3行);Col1=4:2行;Col1=5:1行;Col1=6:2行;Col1=7:1行
总行数:2+3+3+2+1+2+1=14行
3. Right Join(右连接)
保留右表所有行,左表匹配不到则补NULL。行数为右表每行的匹配数之和(匹配不到的行算1行):
- 右表中
Col2=2的3行:每行匹配1行 →3×1=3行 Col2=1的2行:每行匹配1行 →2×1=2行Col2=4的1行:匹配2行 →1×2=2行Col2=6的1行:匹配2行 →1×2=2行Col2=7的1行:匹配1行 →1×1=1行Col2=8的2行:无匹配,保留2行;Col2=9的1行:无匹配,保留1行
总行数:3+2+2+2+1+2+1=13行
4. Full Join(全连接)
保留左右表所有行,匹配不到的一侧补NULL。行数=左连接行数 + 右连接行数 - 内连接行数(去除重复的匹配行):
总行数:14+13-8=19行
内容的提问来源于stack exchange,提问作者Ahmed uddin
相关产品推荐
相关产品推荐

