SQL中的全外连接是什么?
在SQL中,FULLOUTERJOIN组合左外连接和右外连接的结果,并返回连接子句两侧表中的所有(匹配或不匹配)行。接下面sojson给大家详细讲解。
图解:SQL全外连接
句法:
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
语法图 - FULL OUTER JOIN
示例:SQL 完全外连接
让我们使用完全连接来组合相同的两个表。
SQL代码:
SELECT * FROM table_A
FULL OUTER JOIN table_B
ON table_A.A=table_B.A;
输出:
由于这是完全联接,因此两个表中的所有行(匹配和不匹配)都包含在输出中。表table_A和表table_B之间只有一个匹配,因此只有一行输出显示所有列中的值。输出的所有剩余行仅包含表 table_A 或表 table_B 中的值,其余列设置为缺失值
仅一行输出显示所有列中的值,解释如下 -
示例:两个表之间的 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 语句使用“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 语句:
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 语句的输出是使用 Oracle 数据库 10g Express Edition 获取的。
希望sojson能给你的工作带来帮助。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/510.html
转载时必须以链接形式注明原始出处及本声明。
审核编辑 黄宇
-
SQL
+关注
关注
1文章
753浏览量
44017 -
代码
+关注
关注
30文章
4710浏览量
68190
发布评论请先 登录
相关推荐
评论