SQLセルフ結合

概要:このチュートリアルでは、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テーブルを参照してください。

employees_table

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)

試してみる

SQL Self-join example

社長にはマネージャーがいません。従業員テーブルでは、社長が含まれる行の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)

試してみる

SQL self-join with LEFT JOIN example

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

このチュートリアルは役に立ちましたか?