inner join,left join ,right join ,full join

转载自一图看懂join、left join、right join、fulljoin间的区别 - rickon - 博客园

INNER JOIN 关键字在表中存在至少一个匹配时返回行。(inner join 与join是一个意思)

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行。FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

teradata、hive中支持FULL OUTER JOIN这种写法,但是Mysql并不支持,只能用left join union right join来实现

### 不同类型的SQL连接操作的区别用法 #### Inner Join `INNER JOIN` 返回两个表中满足连接条件的记录。这意味着只有当左表右表都存在匹配的数据时,才会返回这些数据。 ```sql SELECT * FROM TableA AS A INNER JOIN TableB AS B ON A.id = B.id; ``` 此查询仅会显示那些在 `TableA` `TableB` 中都有对应 `id` 值的行[^1]。 #### Left Join `LEFT JOIN` (也称为 `LEFT OUTER JOIN`)返回左表中的所有记录,即使右表中不存在匹配项。对于没有找到匹配的情况,在结果集右边会出现 NULL 值。 ```sql SELECT * FROM TableA AS A LEFT JOIN TableB AS B ON A.id = B.id; ``` 这段代码将展示来自 `TableA` 的每一行;如果 `TableB` 中有相应的匹配,则一起呈现;如果没有,则填充 NULL[^4]。 #### Right Join `RIGHT JOIN` 是 `LEFT JOIN` 的镜像版本——它保留右侧表格的所有条目,并补充左侧可能存在的任何关联数据。同样地,缺少的部分会被标记为 NULL。 ```sql SELECT * FROM TableA AS A RIGHT JOIN TableB AS B ON A.id = B.id; ``` 这里的结果将是基于 `TableB` 完整性的集合,加上从 `TableA` 获取的相关信息。 #### Full Join `FULL JOIN` 或者说是 `FULL OUTER JOIN` 将两者的特性结合起来,即无论哪一侧是否有匹配,都会列出所有的组合情况。因此,最终得到的是两张原始表各自独立以及交叉部分的整体视图。未配对的地方则由 NULL 补充完整。 ```sql SELECT * FROM TableA AS A FULL JOIN TableB AS B ON A.id = B.id; ``` 上述语句能够提供最全面的信息覆盖度,因为它不仅包含了共同拥有的项目,还包括了单独存在于任一表内的实体[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值