SQL五种JOIN结果验证及全类型输出与解析请求
五种JOIN操作结果及解释
先明确两张表的结构和数据:
Table A(左表):
id name 1 Pizza 2 Burger 3 Sandwich 4 Hotdog Table B(右表):
id food 2 Burger 3 Sandwich 5 Sushi 6 Kebab
1. 内连接(INNER JOIN)
逻辑:只返回两张表中匹配连接条件(A.id = B.id)的行。
结果:
| id | name | food |
|---|---|---|
| 2 | Burger | Burger |
| 3 | Sandwich | Sandwich |
解释:只有id=2和3在两张表中都存在,仅这两行被保留。
2. 左连接(LEFT JOIN / LEFT OUTER JOIN)
逻辑:保留左表所有行,右表匹配条件的行显示对应数据,不匹配的用NULL填充右表字段。
结果:
| id | name | food |
|---|---|---|
| 1 | Pizza | NULL |
| 2 | Burger | Burger |
| 3 | Sandwich | Sandwich |
| 4 | Hotdog | NULL |
验证你的答案:你给出的答案格式和内容均错误,正确结果如上,左连接会保留左表全部4行,其中id=1和4的右表字段为NULL。
3. 右连接(RIGHT JOIN / RIGHT OUTER JOIN)
逻辑:保留右表所有行,左表匹配条件的行显示对应数据,不匹配的用NULL填充左表字段。
结果:
| id | name | food |
|---|---|---|
| 2 | Burger | Burger |
| 3 | Sandwich | Sandwich |
| 5 | NULL | Sushi |
| 6 | NULL | Kebab |
解释:右表的id=5和6在左表中没有匹配,左表的name字段用NULL填充。
4. 全外连接(FULL OUTER JOIN)
逻辑:保留两张表的所有行,匹配的行合并,不匹配的一侧用NULL填充对应字段。
结果:
| id | name | food |
|---|---|---|
| 1 | Pizza | NULL |
| 2 | Burger | Burger |
| 3 | Sandwich | Sandwich |
| 4 | Hotdog | NULL |
| 5 | NULL | Sushi |
| 6 | NULL | Kebab |
解释:左表和右表的所有行都被保留,无匹配的字段用NULL填充。注意:MySQL不原生支持FULL OUTER JOIN,需要用LEFT JOIN UNION RIGHT JOIN模拟。
5. 交叉连接(CROSS JOIN)
逻辑:返回两张表的笛卡尔积,即左表每一行和右表每一行组合,行数为左表行数×右表行数。
结果(共16行):
| id | name | id | food |
|---|---|---|---|
| 1 | Pizza | 2 | Burger |
| 1 | Pizza | 3 | Sandwich |
| 1 | Pizza | 5 | Sushi |
| 1 | Pizza | 6 | Kebab |
| 2 | Burger | 2 | Burger |
| 2 | Burger | 3 | Sandwich |
| 2 | Burger | 5 | Sushi |
| 2 | Burger | 6 | Kebab |
| 3 | Sandwich | 2 | Burger |
| 3 | Sandwich | 3 | Sandwich |
| 3 | Sandwich | 5 | Sushi |
| 3 | Sandwich | 6 | Kebab |
| 4 | Hotdog | 2 | Burger |
| 4 | Hotdog | 3 | Sandwich |
| 4 | Hotdog | 5 | Sushi |
| 4 | Hotdog | 6 | Kebab |
解释:交叉连接无连接条件,直接生成所有可能的行组合。
内容的提问来源于stack exchange,提问作者frub
相关产品推荐
相关产品推荐

