SQL中的全外連接是什么?
在SQL中,F(xiàn)ULLOUTERJOIN組合左外連接和右外連接的結(jié)果,并返回連接子句兩側(cè)表中的所有(匹配或不匹配)行。接下面sojson給大家詳細(xì)講解。
圖解:SQL全外連接
句法:
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
語(yǔ)法圖 - FULL OUTER JOIN
示例:SQL 完全外連接
讓我們使用完全連接來(lái)組合相同的兩個(gè)表。
SQL代碼:
SELECT * FROM table_A
FULL OUTER JOIN table_B
ON table_A.A=table_B.A;
輸出:
由于這是完全聯(lián)接,因此兩個(gè)表中的所有行(匹配和不匹配)都包含在輸出中。表table_A和表table_B之間只有一個(gè)匹配,因此只有一行輸出顯示所有列中的值。輸出的所有剩余行僅包含表 table_A 或表 table_B 中的值,其余列設(shè)置為缺失值
僅一行輸出顯示所有列中的值,解釋如下 -
示例:兩個(gè)表之間的 SQL 完全外連接
下面是兩個(gè)表之間 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結(jié)果的組合,因此,這里我們將描述FULL OUTER JOIN內(nèi)部是如何執(zhí)行的。
圖解演示SQL全外連接:
以下 SQL 語(yǔ)句使用“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 訂購(gòu)全部 18 Jaffa Cakes
Salt n Shake
19 sip-n-Bite。
使用 WHERE 子句的完整外部聯(lián)接
我們可以包含一個(gè)帶有 FULL OUTER JOIN 的 WHERE 子句,以僅返回那些連接表之間不存在匹配數(shù)據(jù)的行。
以下查詢僅返回在 food 中沒(méi)有匹配食品的公司,以及與上市公司不匹配的 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 相同的結(jié)果
這是示例:
這是 SQL 語(yǔ)句:
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 的組合,并通過(guò)使用 UNION 子句進(jìn)行組合
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 語(yǔ)句的輸出是使用 Oracle 數(shù)據(jù)庫(kù) 10g Express Edition 獲取的。
希望sojson能給你的工作帶來(lái)幫助。
版權(quán)所屬:SO JSON在線解析
原文地址:https://www.sojson.com/blog/510.html
轉(zhuǎn)載時(shí)必須以鏈接形式注明原始出處及本聲明。
審核編輯 黃宇
-
SQL
+關(guān)注
關(guān)注
1文章
753瀏覽量
44032 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68231
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論