Self join
CoddyのSQLジャーニー「基礎」セクションの一部 — レッスン 46/72。
自己結合(セルフジョイン)は、特殊な種類の結合です。これまでは複数のテーブルの結合について説明してきましたが、自己結合は同じテーブル同士を結合します。典型的な例は、employees テーブルです。
| 従業員ID | 従業員名 | マネージャーID |
| 1 | Minke | 2 |
| 2 | Temur | 3 |
| 3 | Tatjana | 4 |
| 4 | Marinela |
最高位のマネージャーを除き、すべての従業員にはマネージャーがいます。また、すべてのマネージャーは従業員でもあります。
問題:各従業員について、マネージャーの名前を確認したいとします。
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id同じテーブル間で結合を行いますが、1回目は e1、2回目は e2 と呼びます。結合は employee_id フィールドと manager_id フィールドの間で行われます。
結果:
| employee_id | employee_name | manager_name |
|---|---|---|
| 1 | Minke | Temur |
| 2 | Temur | Tatjana |
| 3 | Tatjana | Marinela |
チャレンジ
中級利用可能なテーブルとカラム:
<strong>friends</strong>:<strong>id</strong>,<strong>name</strong>,<strong>friend_id</strong>
相互の友人である友人のペアを見つけてください(相互の友情は、人物Aの friend_id が人物Bを指し、かつ人物Bの friend_id が人物Aを指している場合に成立します)。両方の友人の名前を1つの行に表示してください。カラム名を friend1 と friend2 にしてください。
注意:重複するペアを含めないように、WHERE 句に friend1.id < friend2.id という条件を含めてください。
チートシート
自己結合(セルフジョイン)を使用すると、テーブルエイリアスを使用してテーブルをそれ自体に結合できます。これは、同じテーブル内の行を比較したり、同じテーブル内のレコード間の関係を確立したりする必要がある場合に便利です。
基本的な自己結合の構文:
SELECT columns
FROM table_name AS alias1
JOIN table_name AS alias2 ON alias1.column = alias2.column従業員とマネージャーの例:
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id主なポイント:
- 同じテーブルに対して異なるエイリアス(例:
e1、e2)を使用する - 結合条件によってエイリアス間の関連フィールドを接続する
- 従業員とマネージャーの関係のような階層データに便利
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns