SQL 自我聯結

摘要:本教學說明如何使用 SQL 自我聯結技術將表格聯結到自身。

SQL 自我聯結簡介

有時,將表格聯結到自身會很有用。這種聯結類型稱為自我聯結。

我們將表格聯結到自身,以評估同一表格中其他列的資料。要執行自我聯結,我們可以使用 內部聯結左聯結 子句。

由於同一個表格在單一查詢中出現兩次,因此我們必須使用表格別名。以下語句說明如何將表格聯結到自身。

SELECT
	column1,
	column2,
	column3,
        ...
FROM
	table1 A
INNER JOIN table1 B ON B.column1 = A.column2;Code language: SQL (Structured Query Language) (sql)

在這個語句中,使用 INNER JOIN 子句將 table1 聯結到自身。A 和 B 是 table1 的表格別名。B.column1 = A.column2 是聯結條件。

除了 INNER JOIN 子句之外,您還可以使 LEFT JOIN 子句。

讓我們看幾個使用自我聯結技術的範例。

SQL 自我聯結範例

請看以下 employees 表格。

employees_table

manager_id 欄位指定員工的經理。以下語句將 employees 表格聯結到自身,以查詢誰向誰報告的資訊。

SELECT 
    e.first_name || ' ' || e.last_name AS employee,
    m.first_name || ' ' || m.last_name AS manager
FROM
    employees e
        INNER JOIN
    employees m ON m.employee_id = e.manager_id
ORDER BY manager;Code language: SQL (Structured Query Language) (sql)

試試看

SQL Self-join example

總裁沒有任何經理。在 employees 表格中,包含總裁的列的 manager_id 為 NULL。

由於內部聯結子句僅包含在另一個表格中有匹配列的列,因此總裁沒有出現在上述查詢的結果集中。

為了在結果集中包含總裁,我們使用 LEFT JOIN 子句而不是 INNER JOIN 子句,如下列查詢所示。

SELECT 
    e.first_name || ' ' || e.last_name AS employee,
    m.first_name || ' ' || m.last_name AS manager
FROM
    employees e
        LEFT JOIN
    employees m ON m.employee_id = e.manager_id
ORDER BY manager;Code language: SQL (Structured Query Language) (sql)

試試看

SQL self-join with LEFT JOIN example

在本教學中,您已學習如何使用 INNER JOIN 或 LEFT JOIN 子句將表格聯結到自身。

這個教學對您有幫助嗎?