SQL全外连接剖析

电子说

1.3w人已加入

描述

SQL中的全外连接是什么?

在SQL中,FULLOUTERJOIN组合左外连接和右外连接的结果,并返回连接子句两侧表中的所有(匹配或不匹配)行。接下面sojson给大家详细讲解。
 

图解:SQL全外连接
 

SQL


 

SQL


 

SQL


 

句法:
 

SELECT * 

FROM table1 

FULL OUTER JOIN table2 

ON table1.column_name=table2.column_name;

语法图 - FULL OUTER JOIN
 

SQL


 

示例:SQL 完全外连接

让我们使用完全连接来组合相同的两个表。

SQL


 

SQL代码:
 

SELECT * FROM table_A 

FULL OUTER JOIN table_B 

ON table_A.A=table_B.A;

输出:
 

SQL


 

由于这是完全联接,因此两个表中的所有行(匹配和不匹配)都包含在输出中。表table_A和表table_B之间只有一个匹配,因此只有一行输出显示所有列中的值。输出的所有剩余行仅包含表 table_A 或表 table_B 中的值,其余列设置为缺失值

仅一行输出显示所有列中的值,解释如下 -

SQL


 

示例:两个表之间的 SQL 完全外连接

下面是两个表之间 SQL 中的完全外连接的示例。

示例表:食品

+---------+--------------+-----------+------------+

| ITEM_ID | ITEM_NAME    | ITEM_UNIT | COMPANY_ID |

+---------+--------------+-----------+------------+

| 1       | Chex Mix     | Pcs       | 16         |

| 6       | Cheez-It     | Pcs       | 15         |

| 2       | BN Biscuit   | Pcs       | 15         |

| 3       | Mighty Munch | Pcs       | 17         |

| 4       | Pot Rice     | Pcs       | 15         |

| 5       | Jaffa Cakes  | Pcs       | 18         |

| 7       | Salt n Shake | Pcs       |            |

+---------+--------------+-----------+------------+

示例表:公司
 

+------------+---------------+--------------+

| COMPANY_ID | COMPANY_NAME  | COMPANY_CITY |

+------------+---------------+--------------+

| 18         | Order All     | Boston       |

| 15         | Jack Hill Ltd | London       |

| 16         | Akas Foods    | Delhi        |

| 17         | Foodies.      | London       |

| 19         | sip-n-Bite.   | New York     |

+------------+---------------+--------------+

我们知道FULL OUTER JOIN是LEFT OUTER JOIN和RIGHT OUTER JOIN结果的组合,因此,这里我们将描述FULL OUTER JOIN内部是如何执行的。

图解演示SQL全外连接:

SQL


 

以下 SQL 语句使用“FULL OUTER JOIN”子句返回“foods”表和“company”表中的所有行。

SQL代码:

SELECT a.company_id AS "a.ComID",

a.company_name AS "C_Name",

b.company_id AS "b.ComID", 

b.item_name AS "I_Name" 

FROM   company a 

FULL OUTER JOIN foods b 

ON a.company_id = b.company_id;

输出:
 

a.ComID C_Name b.ComID I_Name 

---------- ------------------------- ---------- --- ------------- 

16 Akas Foods 16 Chex Mix 

15 Jack Hill Ltd 15 Cheez-It 

15 Jack Hill Ltd 15 BN Biscuit 

17 Foodies。17 Mighty Munch 

15 Jack Hill Ltd 15 Pot Rice 

18 订购全部 18 Jaffa Cakes 

                                                Salt n Shake 

19 sip-n-Bite。

使用 WHERE 子句的完整外部联接

我们可以包含一个带有 FULL OUTER JOIN 的 WHERE 子句,以仅返回那些连接表之间不存在匹配数据的行。

以下查询仅返回在 food 中没有匹配食品的公司,以及与上市公司不匹配的 food 中的食品。

SELECT a.company_id AS "a.ComID", 

a.company_name AS "C_Name",

b.company_id AS "b.ComID", 

b.item_name AS "I_Name" 

FROM   company a

FULL OUTER JOIN foods b

ON a.company_id = b.company_id

WHERE a.company_id IS NULL 

OR b.company_id IS NULL 

ORDER BY company_name;

输出:
 

a.ComID    C_Name                    b.ComID    I_Name

---------- ------------------------- ---------- ---------------

19         sip-n-Bite.

                                                Salt n Shake

使用 Union 子句的完全外连接

UNION 子句可用作替代,以获得与 FULL OUTER JOIN 相同的结果

这是示例:

SQL


 

这是 SQL 语句:
 

SELECT table_a.A,table_a.M,table_b.A,table_b.N 

FROM table_A 

FULL OUTER JOIN table_B 

ON table_A.a=table_b.A 

ORDER BY table_A.A;

使用LEFT和RIGHT OUTER JOIN以及UNION 子句的FULL OUTER JOIN

下面的代码是,LEFT OUTER JOIN 和 RIGHT OUTER JOIN 的组合,并通过使用 UNION 子句进行组合
 

SELECT table_a.A,table_a.M,table_b.A,table_b.N 

FROM table_A 

LEFT OUTER JOIN table_B 

ON table_A.a=table_b.A 

UNION 

SELECT table_a.A,table_a.M,table_b.A,table_b.N 

FROM table_A 

RIGHT OUTER JOIN table_B 

ON table_A.a=table_b.A;

SQL


 

注意:此处显示的所述 SQL 语句的输出是使用 Oracle 数据库 10g Express Edition 获取的。

希望sojson能给你的工作带来帮助。

版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/510.html

转载时必须以链接形式注明原始出处及本声明。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分