摘要:在本教學中,您將學習如何使用 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 範例
讓我們舉一個使用 FULL OUTER JOIN
子句的範例,來看看它是如何運作的。
首先,建立兩個新表格:baskets
和 fruits
以進行示範。每個籃子可以存放零個或多個水果,而每個水果可以存放在零個或一個籃子中。
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)
其次,將一些範例資料插入 baskets
和 fruits
表格中。
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 子句從多個表格查詢資料。
這個教學對您有幫助嗎?