请求协助理解两张表执行Inner Join与Right Outer Join后的结果
嘿,这就帮你把这两种连接操作的结果拆解清楚~
内连接(Inner Join)结果解析
内连接的核心逻辑很直白:只保留两张表中关联字段(这里是ID)完全匹配的行,而且会把匹配到的行做笛卡尔积组合——说白了就是左表中每个匹配的行,都要和右表中每个匹配的行配对一次。
你的两张表ID全是1,所以所有行都能匹配上。执行内连接后的结果如下:
| ID | Column A | Column B |
|---|---|---|
| 1 | A | D |
| 1 | A | E |
| 1 | A | F |
| 1 | B | D |
| 1 | B | E |
| 1 | B | F |
| 1 | C | D |
| 1 | C | E |
| 1 | C | F |
总共是左表3行 × 右表3行 = 9行数据,每一行都是两组数据的合法配对。
右外连接(Right Outer Join)结果解析
右外连接的核心是以右表(这里是表2)为绝对基准:不管左表有没有匹配的行,右表的所有行都必须保留;左表中能找到匹配ID的行,就和右表的行组合;如果左表找不到对应ID,那左表的字段就会显示为NULL。
在你的案例里,两张表的ID都是1,右表的每一行都能在左表找到匹配项,所以结果和内连接完全一致:
| ID | Column A | Column B |
|---|---|---|
| 1 | A | D |
| 1 | A | E |
| 1 | A | F |
| 1 | B | D |
| 1 | B | E |
| 1 | B | F |
| 1 | C | D |
| 1 | C | E |
| 1 | C | F |
举个更直观的反例:如果表2新增一行ID=2, Column B=G,那右外连接的结果里会多出来这样一行:
| ID | Column A | Column B |
|---|---|---|
| 2 | NULL | G |
这就能明显看出右外连接“优先保留右表所有数据”的特性啦~
内容的提问来源于stack exchange,提问作者PHegde
相关产品推荐
相关产品推荐

