SQL FULL OUTER JOIN

摘要:在本教學中,您將學習如何使用 SQL FULL OUTER JOIN 子句從多個表格查詢資料。

SQL FULL OUTER JOIN 子句簡介

理論上,完整外部聯結是左聯結和右聯結的組合。完整外部聯結包含聯結表格中的所有列,無論另一表格是否有相符的列。

如果聯結表格中的列不相符,完整外部聯結的結果集中,對於缺少相符列的表格的每個欄位,都會包含 NULL 值。對於相符的列,結果集中會包含一個單獨的列,該列的資料來自於聯結的表格。

以下陳述式說明兩個表格的完整外部聯結的語法

SELECT column_list
FROM A
FULL OUTER JOIN B ON B.n = A.n;Code language: SQL (Structured Query Language) (sql)

請注意,OUTER 關鍵字是選用的。

以下文氏圖說明兩個表格的完整外部聯結。

SQL FULL OUTER JOIN

SQL FULL OUTER JOIN 範例

讓我們舉一個使用 FULL OUTER JOIN 子句的範例,來看看它是如何運作的。

首先,建立兩個新表格basketsfruits 以進行示範。每個籃子可以存放零個或多個水果,而每個水果可以存放在零個或一個籃子中。

CREATE TABLE fruits (
	fruit_id INTEGER PRIMARY KEY,
	fruit_name VARCHAR (255) NOT NULL,
	basket_id INTEGER
);Code language: SQL (Structured Query Language) (sql)
CREATE TABLE baskets (
	basket_id INTEGER PRIMARY KEY,
	basket_name VARCHAR (255) NOT NULL
);Code language: SQL (Structured Query Language) (sql)

其次,將一些範例資料插入 basketsfruits 表格中。

INSERT INTO baskets (basket_id, basket_name)
VALUES
	(1, 'A'),
	(2, 'B'),
	(3, 'C');
Code language: SQL (Structured Query Language) (sql)
INSERT INTO fruits (
	fruit_id,
	fruit_name,
	basket_id
)
VALUES
	(1, 'Apple', 1),
	(2, 'Orange', 1),
	(3, 'Banana', 2),
	(4, 'Strawberry', NULL);Code language: SQL (Structured Query Language) (sql)

第三,以下查詢會傳回在籃子中的每個水果,以及有水果的每個籃子,同時也會傳回不在任何籃子中的每個水果,以及沒有任何水果的每個籃子。

SELECT
	basket_name,
	fruit_name
FROM
	fruits
FULL OUTER JOIN baskets ON baskets.basket_id = fruits.basket_id;Code language: SQL (Structured Query Language) (sql)
 basket_name | fruit_name
-------------+------------
 A           | Apple
 A           | Orange
 B           | Banana
 (null)      | Strawberry
 C           | (null)Code language: SQL (Structured Query Language) (sql)

如您所見,籃子 C 沒有任何水果,而 Strawberry 不在任何籃子中。

您可以將 WHERE 子句 加入到使用 FULL OUTER JOIN 子句的陳述式中,以取得更具體的資訊。

例如,要找出沒有存放任何水果的空籃子,您可以使用以下陳述式

SELECT
	basket_name,
	fruit_name
FROM
	fruits
FULL OUTER JOIN baskets ON baskets.basket_id = fruits.basket_id
WHERE
	fruit_name IS NULL;Code language: SQL (Structured Query Language) (sql)
 basket_name | fruit_name
-------------+------------
 C           | (null)
(1 row)Code language: SQL (Structured Query Language) (sql)

同樣地,如果您想查看哪個水果不在任何籃子中,您可以使用以下陳述式

SELECT
	basket_name,
	fruit_name
FROM
	fruits
FULL OUTER JOIN baskets ON baskets.basket_id = fruits.basket_id
WHERE
	basket_name IS NULL;Code language: SQL (Structured Query Language) (sql)
 basket_name | fruit_name
-------------+------------
(null)       | Strawberry
(1 row)Code language: SQL (Structured Query Language) (sql)

在本教學中,我們向您展示如何使用 SQL FULL OUTER JOIN 子句從多個表格查詢資料。

這個教學對您有幫助嗎?