概要:このチュートリアルでは、SQLのセルフ結合テクニックを使用してテーブルを自身に結合する方法を説明します。
SQLセルフ結合入門
テーブルを自身に結合することが役立つ場合があります。このタイプの結合は、セルフ結合と呼ばれます。
同じテーブル内の他の行と行を評価するために、テーブルを自身に結合します。セルフ結合を実行するには、内部結合または左外部結合句を使用します。
同じテーブルが単一のクエリに2回表示されるため、テーブルエイリアスを使用する必要があります。次のステートメントは、テーブルを自身に結合する方法を示しています。
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
テーブルを参照してください。

manager_id
列は、従業員のマネージャーを指定します。次のステートメントは、従業員テーブルを自身に結合して、誰が誰を管理しているかの情報を照会します。
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)

社長にはマネージャーがいません。従業員テーブルでは、社長が含まれる行のmanager_idはNULLです。
内部結合句は、他のテーブルに一致する行を持つ行のみを含めるため、社長は上記のクエリの結果セットに表示されませんでした。
結果セットに社長を含めるには、上記のクエリのようにINNER JOIN句ではなくLEFT 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)

このチュートリアルでは、INNER JOIN句またはLEFT JOIN句を使用してテーブルを自身に結合する方法を学習しました。