跳到主要内容

SQL中的全外连接(FULL OUTER JOIN)

提示
  1. 连接两个表FULL OUTER JOIN 在 SQL 中基于共有列连接两个表,同时包括所有匹配和不匹配的行。
  2. 基本语法FULL OUTER JOIN 的基本语法为 SELECT columns FROM table1 FULL OUTER JOIN table2 ON table1.column1 = table2.column2
  3. 包含所有行:结果集包含两个表的所有行,即使在两个表中没有共有的 customer_id 值也会被包括在内。

SQL 的 FULL OUTER JOIN 语句基于共有列将两个表连接起来。它选择这些列中具有匹配值的记录以及两个表中的其余行。

示例

-- 完全连接 Customers 和 Orders 表
-- 基于它们共有的 customer_id 列
-- Customers 是左表
-- Orders 是右表

SELECT Customers.customer_id, Customers.first_name, Orders.item
FROM Customers
FULL OUTER JOIN Orders
ON Customers.customer_id = Orders.customer_id;

这里,SQL 查询对两个表 CustomersOrders 进行了 FULL OUTER JOIN。这意味着结果集包含两个表的所有行,包括那些没有共有 customer_id 值的行。

完全外连接语法

SQL FULL OUTER JOIN 语句的语法是:

SELECT columns
FROM table1
FULL OUTER JOIN table2
ON table1.column1 = table2.column2;

这里,

  • table1table2 是要连接的表
  • column1column2 是两个表中的相关列

示例:SQL 外连接

SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
FULL OUTER JOIN Orders
ON Customers.customer_id = Orders.customer;

这里,SQL 命令选择了 Customers 表的 customer_idfirst_name 列以及 Orders 表的 amount 列。

结果集将包含两个表的所有行,无论 Customers 表的 customer_idOrders 表的 customer 之间是否匹配。

如何在 SQL 中使用完全外连接

带 WHERE 子句的完全外连接

SQL 的 FULL OUTER JOIN 语句可以有一个可选的 WHERE 子句。例如,

SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
FULL OUTER JOIN Orders
ON Customers.customer_id = Orders.customer
WHERE Orders.amount >= 500;

这里,SQL 命令连接了两个表,并选择了 amount 大于或等于 500 的行。

使用别名的 SQL 完全外连接

我们可以在 FULL OUTER JOIN 内使用 AS 别名 使查询简洁明了。例如,

-- 对 Categories 表使用别名 C
-- 对 Products 表使用别名 P
SELECT C.category_name, P.product_title
FROM Categories AS C
FULL OUTER JOIN Products AS P
ON C.category_id = P.cat_id;

这里,SQL 命令对 CategoriesProducts 表进行了完全外连接,同时分别为它们指定了别名 CP

推荐阅读