SQL的FULLOUTERJOIN是什么?全外连接的实现方法

FULLOUTERJOIN 是一种 SQL 连接。

我上周学到了这一点。

返回两个表的所有行。

匹配记录将显示完整数据。

不匹配的记录将用 NULL 填充。

左边的表中有三条数据。

右表中有两条数据。

中间有一场比赛。

结果将是4 条数据。

语法结构是这样的。

SELECT 列名 1 ,列名 2 ...
FROM 表 A FULL OUTER JOIN 表 B
ON 表 A. 匹配列 = 表 B. 匹配列
与 LEFT JOIN 和 RIGHT JOIN 不同。

LEFT JOIN 返回左表的所有行。

右侧表中的匹配行也会返回。

不匹配的右表列用 NULL 填充。

RIGHT JOIN 返回右表的所有行。

还返回左表中的匹配行。

不匹配的左表列用 NULL 填充。

FULL OUTER JOIN 返回左表中的唯一行。

它还返回右侧表中的唯一行。

匹配行将显示完整数据。

总结关系。

全外连接=左连接∪右连接(去重后)。

实际应用场景。

数据审核。

比较新旧系统之间的客户信息。

确定共同客户。

仅适用于旧系统的客户。

仅适用于新系统客户。

销售和库存管理。

分析正在促销但缺货的产品。

需要补货。

分析有库存但未售出的产品。

这是一种滞销产品。

用户行为分析。

区分活跃用户。

注册并登录。

识别丢失的用户。

已注册但未登录。

区分异常用户。

您已登录,但尚未注册。

数据集成。

合并来自不同供应商的产品列表。

标记共享产品。

标记独特的产品。

如果您的数据库不支持,另一种方法。

您可以使用 LEFT JOIN + RIGHT JOIN + UNION ALL。

首先,从左表中获取所有行,然后从右表中获取匹配的行。

从适当的表中获取唯一的行。

使用 UNION ALL 合并结果。

代码示例。

第 1 步:获取左表中的所有行以及右表中的匹配行。

SELECT A.id ASA_id, A.value ASA_value, B.id ASB_id, B.value ASB_value
FROM TableA A
LEFT JOIN TableB B
ON A.id = B.id
UNION ALL
第 2 步:获取相应表的唯一行。

SELECT A.id ASA_id, A.value ASA_value, B.id ASB_id, B.value ASB_value
FROM TableA A
RIGHT JOIN TableB B
ON A.id = B.id
WHERE A.id IS NULL;
注意。

另一种方法可能需要多次全表扫描。

性能低于本机 FULL OUTER JOIN。

适合中小型数据集。

或者,该场景没有本机支持。

总结。

FULL OUTER JOIN 考虑了“包含”属性。

在数据比对、审计、异常检测等场景中发挥着重要作用。

如果数据库不兼容。

通过组合 LEFT JOIN 和 RIGHT JOIN 可以实现类似的功能。

但是,您需要权衡性能与需求。

算了。

sql左外连接和右外连接的区别

一张图看懂 SQL 的各种 join 用法

INNERJOIN查找共性,左连接整个左表,右连接整个右表。
所有连接均可用。
排除连接以查找差异。
一图胜千言,项目用例数量一目了然。

sql左外连接和右外连接的区别

这是一个陷阱。
不要相信左外连接和右外连接具有相同的效果。

2 02 0 年,一个团队滥用左外连接,导致 3 0% 的订单丢失。

实用提醒:明确连接类型,了解基准表和结果集的区别。