另外,如何 LEFT OUTER JOIN 、 RIGHT OUTER JOIN 和 FULL OUTER JOIN 适合? 原文由 Chris de Vries 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设您要加入没有重复的列,这是一种非常常见的情况: A 和 B 的内连接给出了 A 相交 B 的结果,即 维恩图 相交的内部部分。 A 和 B 的外连接给出了 A 联合 B 的结果,即 维恩图 联合的外部部分。 例子 假设您有两个表,每个表都有一个列,数据如下: A B - - 1 3 2 4 3 5 4 6 请注意,(1,2) 是 A 独有的,(3,4) 是常见的,(5,6) 是 B 独有的。 内部联接 使用任一等效查询的内连接给出了两个表的交集,即它们共有的两行。 select * from a INNER JOIN b on a.a = b.b; select a.*, b.* from a,b where a.a = b.b; a | b --+-- 3 | 3 4 | 4 左外连接 左外连接将给出 A 中的所有行,以及 B 中的任何公共行。 select * from a LEFT OUTER JOIN b on a.a = b.b; select a.*, b.* from a,b where a.a = b.b(+); a | b --+----- 1 | null 2 | null 3 | 3 4 | 4 右外连接 右外连接将给出 B 中的所有行,以及 A 中的任何公共行。 select * from a RIGHT OUTER JOIN b on a.a = b.b; select a.*, b.* from a,b where a.a(+) = b.b; a | b -----+---- 3 | 3 4 | 4 null | 5 null | 6 全外连接 全外连接将为您提供 A 和 B 的并集,即 A 中的所有行和 B 中的所有行。如果 A 中的某些内容在 B 中没有对应的数据,则 B 部分为空,反之亦然反之亦然。 select * from a FULL OUTER JOIN b on a.a = b.b; a | b -----+----- 1 | null 2 | null 3 | 3 4 | 4 null | 6 null | 5 原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议
通过一个示例可以更轻松地解释连接: 要模拟存储在不同表中的人员和电子邮件, 表 A 和表 B 由 Table_A 连接。 id = 表_B。 name_id 内部联接 仅显示匹配的 ID 行。 外连接 显示了 表 A 的匹配 ID 和不匹配行。 显示了 表 B 的匹配 ID 和不匹配行。 显示了两个表中匹配的 id 和不匹配的行。 注意:完全外连接在 MySQL 上不可用 原文由 HGG-Dev 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设您要加入没有重复的列,这是一种非常常见的情况:
A 和 B 的内连接给出了 A 相交 B 的结果,即 维恩图 相交的内部部分。
A 和 B 的外连接给出了 A 联合 B 的结果,即 维恩图 联合的外部部分。
例子
假设您有两个表,每个表都有一个列,数据如下:
请注意,(1,2) 是 A 独有的,(3,4) 是常见的,(5,6) 是 B 独有的。
内部联接
使用任一等效查询的内连接给出了两个表的交集,即它们共有的两行。
左外连接
左外连接将给出 A 中的所有行,以及 B 中的任何公共行。
右外连接
右外连接将给出 B 中的所有行,以及 A 中的任何公共行。
全外连接
全外连接将为您提供 A 和 B 的并集,即 A 中的所有行和 B 中的所有行。如果 A 中的某些内容在 B 中没有对应的数据,则 B 部分为空,反之亦然反之亦然。