SQL 自連線

摘要:在本教程中,您將學習如何使用 SQL 自連線技術來比較同一表中的行。

SQL 自連線簡介 #

通常,您使用內連線 (inner join)左連線 (left join)右連線 (right join) 等連線操作來根據某個條件合併兩個表中的行。

然而,連線並不一定涉及多個表。您可以使用連線來比較同一表中的行。在這種情況下,您將一個表連線到它自身,這就形成了自連線。

自連線是一種比較同一表內行的連線。自連線使用內連線、左連線或右連線將一個表連線到其自身。它使用表別名將同一個表在同一個查詢中視為不同的表。

以下是自連線的基本語法:

SELECT
  select_list
FROM
  table1 t1
  INNER JOIN table1 AS t2 ON t1.column1 = t2.column2;Code language: SQL (Structured Query Language) (sql)

在此語法中,您可以使用 LEFT JOINRIGHT JOINFULL JOIN 來代替 INNER JOIN

SQL 自連線示例 #

我們將使用 HR 示例資料庫中的 employees 表。

SQL SELF JOIN - employees table.

employees 表中:

  • employee_id 作為每位員工的唯一識別符號。
  • manager_id 代表當前員工彙報物件的經理的 employee_id。如果 manager_idNULL,則表示該員工是 CEO,沒有經理。

以下查詢使用內連線將 employees 表連線到自身,以獲取誰向誰彙報的資訊:

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

試一試

輸出

  employee   |  manager
-------------+-----------
 Valli       | Alexander
 Diana       | Alexander
 Bruce       | Alexander
 David       | Alexander
 Guy         | Den
 Karen       | Den
 Alexander   | Den
 Shelli      | Den
 Sigal       | Den
 Alexander   | Lex
 Irene       | Matthew
...Code language: plaintext (plaintext)

由於內連線子句只包含在另一個表中有匹配行的記錄,因此該查詢的結果集中不包括 CEO。

要在結果集中包含 CEO,您可以使用 LEFT JOIN 子句代替 INNER JOIN 子句。

使用 LEFT JOIN 子句執行自連線 #

以下語句使用 LEFT JOIN 子句執行自連線:

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

試一試

輸出

  employee   |  manager
-------------+-----------
 Steven      | NULL
 Bruce       | Alexander
 David       | Alexander
 Valli       | Alexander
 Diana       | Alexander
 Sigal       | Den
 Guy         | Den
 Alexander   | Den
 Shelli      | Den
 Karen       | Den
 Alexander   | Lex
 Irene       | Matthew
...Code language: plaintext (plaintext)

摘要 #

  • 自連線是一種比較同一表內行的連線。
  • 使用內連線、左連線或全連線來執行自連線。
  • 在查詢中使用表別名,將同一個表視為兩個獨立的表。

測驗 #

資料庫 #

本教程是否有幫助?
© .