ここでは弊社の新人エンジニア研修の参考にテーブルの自己結合を行う方法について解説します。
MySQLにおけるテーブルの自己結合の例を以下に示します。例として、従業員(employees)テーブルを使用して、従業員の上司との関係を示す結合を行います。通常は上司も一種の従業員なので同じ表にいるはずです。
例えば、以下のテーブルではJohnには上司がいません。AliceとBobの上司はJohnでCharlieの上司はアリスです。
まず、上記のemployeesテーブルの作成とデータの挿入を行います。
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT
);
INSERT INTO employees (id, name, manager_id)
VALUES
(1, 'John', NULL),
(2, 'Alice', 1),
(3, 'Bob', 1),
(4, 'Charlie', 2);
上記の例では、従業員のIDと名前を保持するemployees
テーブルを作成し、manager_id
列を使用して上司との関係を表しています。上司が存在しない場合はNULL
となります。
次に、従業員と上司の関係を示す自己結合を行います。以下のクエリを使用します。
SELECT e.name AS employee_name, m.name AS manager_name -- この行は、従業員の名前とマネージャーの名前を選択します。"AS"キーワードは、選択したカラムのエイリアス(別名)を設定します。この場合、"e.name"は"employee_name"として、"m.name"は"manager_name"として表示されます。
FROM employees e -- この行は、データの取得元となるテーブルを指定します。ここでは"employees"テーブルからデータを取得します。"e"はこのテーブルのエイリアスで、これにより後続の行で"e"と書くだけで"employees"テーブルを参照することができます。
JOIN employees m ON e.manager_id = m.id; -- この行は、"employees"テーブルをもう一度自己結合します。ただし、ここでは"m"という新しいエイリアスを使用しています。"ON"キーワードの後の条件(e.manager_id = m.id)は、結合する際の一致条件を示しており、各従業員の"manager_id"が、そのマネージャーの"id"と一致する場合に結合します。
このクエリでは、employees
テーブルを従業員(e
)と上司(m
)の2つの別名を付けたテーブルとして結合しています。結合条件として、従業員のmanager_id
が上司のid
に一致するように指定しています。
この結果、従業員の名前(employee_name
)とその上司の名前(manager_name
)の組み合わせが表示されます。
例の結果は次のようになります:
上記の結果では、AliceとBobはJohnの部下であり、CharlieはAliceの部下であることがわかります。これにより、従業員と上司の関係が自己結合によって取得されました。
以上、テーブルの自己結合を行う方法でした。