Skip to the content.

DS検定トップ > 自己結合とは?同じテーブルを結合する理由を理解する【DS検定】

まず結論

自己結合(Self Join)とは、同じテーブルを2回使って結合するSQL処理です。

DS検定では 「同じテーブル内のデータ同士を結びつける」ケースで使われます。

ポイントは

テーブルが1つしかない

しかし 別の行の情報を取得したい

という状況です。

直感的な説明

自己結合は

「同じ表の中の別の行を参照する」

ために使います。

例えば次の 社員テーブルを考えます。

社員テーブル

社員ID 名前 上司ID

1 田中 3 2 鈴木 3 3 山本 NULL

この表には

社員の名前

上司のID

はあります。

しかし

上司の名前はありません。

つまり

社員 上司

田中 ? 鈴木 ?

という状態です。

ここで

上司ID = 社員ID

を使って 同じテーブルを結合します。

自己結合のイメージ

社員テーブル(社員) × 社員テーブル(上司)

自己結合の結果

社員 上司

田中 山本 鈴木 山本 山本 NULL

ここで初めて

上司の名前を取得できます。

つまり自己結合とは

同じテーブルの別の行の情報を取得する処理

です。

定義・仕組み

自己結合とは

同じテーブルに別名(エイリアス)を付けてJOINすることです。

SQLでは次のように書きます。

SELECT e1.name AS 社員, e2.name AS 上司 FROM employees e1 LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id;

ここで

e1 は「社員として見る employees」

e2 は「上司として見る employees」

です。

つまり、

同じテーブルを役割別に2回使っている

のが自己結合のポイントです。

どんな場面で使う?

自己結合は次のような場面で使われます。

社員と上司の関係

商品カテゴリの親子関係

組織ツリー

前日データとの比較

例えばカテゴリテーブルで、

親カテゴリID

子カテゴリID

を持っていれば、

同じテーブル同士を結合して親カテゴリ名を取得できます。

よくある誤解・混同

混同①:自己結合は特別なJOIN構文

自己結合は特別な構文ではなく、

同じテーブルに別名を付けて通常のJOINをする

だけです。

混同②:同じテーブルだからJOINできない

実際には、

エイリアスを使えば別テーブルのように扱える

ため問題なく結合できます。

混同③:自己結合は常に親子関係だけに使う

自己結合は親子関係だけでなく、

同一テーブル内で別行同士を比較したい場面全般

で使えます。

まとめ(試験直前用)

自己結合=同じテーブルを2回使って結合すること

エイリアスを付けて役割を分ける

社員と上司、親と子などの関係表現でよく使う

DS検定では「同じテーブル内の別行を対応づける」と理解する

対応スキル項目(データエンジニアリング力シート)

データ操作

SQL

★ 同一テーブルを別名で結合して関係を取り出せる

🔗 関連記事


🏠 DS検定トップに戻る