SQL OUTER JOIN 外连接

时间:2018-11-15 17:46:46  来源:igfitidea点击:

在本教程中,我们将学习如何使用SQL外部连接OUTER JOIN,包括左外部连接、右外部连接和完全外部连接。

SQL OUTER JOIN – 左外连接

SQL左外连接也称为SQL左连接。
假设我们要连接两个表:A和B。SQL 左连接将返回左表(A)中的所有行和右表(B)中的所有匹配行。
这意味着SQL左连接的结果总是包含左表中的行。

下面演示了连接两个表table_A和table_B的SQL左外连接语法:

SELECT column1, column2... 
FROM table_A
LEFT JOIN table_B ON join_condition
WHERE row_condition

SQL OUTER JOIN – 左外连接示例

以下查询选择所有客户及其订单:

SELECT c.customerid, 
       c.companyName,
       orderid
FROM customers c
LEFT JOIN orders_test o ON o.customerid = c.customerid
ORDER BY orderid

列出了客户表中的所有行。如果在orders表中没有为客户表中的行找到匹配的行,则orders表中的orderid列将使用空值填充。

SQL OUTER JOIN – 右外部连接

SQL右外部连接也称为SQL右连接。
SQL 右外部联接将返回右表中的所有行和左表中找到的所有匹配行。

SQL右外部联接的语法如下:

SELECT column1, column2... 
FROM table_A
RIGHT JOIN table_B ON join_condition
WHERE row_condition

SQL OUTER JOIN – 右外连接示例

下面的示例演示SQL右外部联接:

查询返回orders表中的所有行和customers表中找到的所有匹配行。

SELECT c.customerid, 
       c.companyName,
       orderid
FROM customers c
RIGHT JOIN orders_test o ON o.customerid = c.customerid
ORDER BY orderid

SQL OUTER JOIN – 完全外部连接

SQL完全外部联接的语法如下:

SELECT column1, column2... 
FROM table_A
FULL OUTER JOIN table_B ON join_condition
WHERE row_condition

SQL完全外部连接将返回:

  • 左表table_A中的所有行。
  • 右表table_B中的所有行。
  • 以及两个表中所有匹配的行。

一些数据库管理系统不支持SQL完全外部连接语法,例如MySQL。因为SQL完全外部连接返回的结果集是左连接和右连接的组合结果。因此,可以使用左连接和右连接以及UNION运算符轻松模拟SQL完全外部连接,如下所示:

SELECT column1, column2... 
FROM table_A
LEFT JOIN table_B ON join_condition
UNION
SELECT column1, column2... 
FROM table_A
RIGHT JOIN table_B ON join_condition

SQLOUTER JOIN – 完全外部连接示例

SELECT c.customerid, 
       c.companyName,
       orderid
FROM customers c
FULL OUTER JOIN orders o ON o.customerid = c.customerid
ORDER BY orderid