【SQL初心者向け】同じテーブルの複数列を結合するテクニックをマスターしよう!
SQLで同じテーブルの複数の列を結合する方法
例:
従業員テーブル employees
に、従業員ID、名前、所属部門を格納する列があると仮定します。各部門には、部門ID、部門名、マネージャーIDを格納する列がある部門テーブル departments
もあります。
部門に所属する従業員の名前と部門名を一覧表示するには、次のクエリを使用します。
SELECT e.employee_id, e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
このクエリは、employees
テーブルの各行を departments
テーブルの対応する行と結合します。一致する行が見つかった場合、結合された行のすべての列が結果セットに含まれます。
複数の列で結合する際の注意点:
- 結合する列は、同じデータ型である必要があります。
- 結合する列にNULL値が含まれている場合、結合の結果が影響を受ける可能性があります。
- 結合の種類によって、結果セットに表示される行が決まります。
その他の結合の種類:
- 内部結合: 一致する行のみを返します。
- 左外部結合: 左側のテーブルのすべての行と、一致する右側のテーブルの行 (存在する場合) を返します。
- クロス結合: 両方のテーブルのすべての行を結合します。
これらのリソースは、SQLで同じテーブルの複数の列を結合する方法についてさらに詳しく知るのに役立ちます。
従業員テーブル employees
と部門テーブル departments
の構造は次のとおりです。
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(255),
department_id INT
);
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(255),
manager_id INT
);
従業員と部門を結合するクエリ
以下のクエリは、employees
テーブルと departments
テーブルを結合し、各従業員の名前と所属部門名を一覧表示します。
SELECT e.employee_id, e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
結果
employee_id | name | department_name
------------+------------+-----------------
1 | John Doe | Sales
2 | Jane Doe | Marketing
3 | Peter Jones | Engineering
説明
SELECT
: この句は、クエリで返される列を指定します。この例では、employee_id
、name
、department_name
列を選択します。JOIN
: この句は、テーブルを結合する方法を指定します。この例では、employees
テーブルのdepartment_id
列とdepartments
テーブルのdepartment_id
列を結合します。
- 特定の部門に所属する従業員のみを表示するには、
WHERE
句を使用します。
SELECT e.employee_id, e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.department_name = 'Sales';
- 従業員のマネージャーの名前を表示するには、
departments
テーブルをemployees
テーブルと2回結合します。
SELECT e.employee_id, e.name, d.department_name, m.name AS manager_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN employees m ON d.manager_id = m.employee_id;
SQLで同じテーブルの複数の列を結合するその他の方法
自己参照結合は、同じテーブルを2回参照して、行同士を関連付ける特殊な種類の結合です。部門テーブルのマネージャーIDを従業員名と結合する例を次に示します。
SELECT e1.employee_id, e1.name, e2.name AS manager_name
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.employee_id;
外部結合は、一致する行だけでなく、一致しない行も含めて結果セットに表示します。部門に所属していない従業員も含めて表示するには、次のクエリを使用します。
SELECT e.employee_id, e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
クロス結合は、両方のテーブルのすべての行を結合します。すべての従業員とすべての部門を結合するには、次のクエリを使用します。
SELECT e.employee_id, e.name, d.department_name
FROM employees e
CROSS JOIN departments d;
サブクエリは、クエリ内で別のクエリを使用するテクニックです。部門IDが1である部門に所属する従業員の名前を表示するには、次のクエリを使用します。
SELECT e.name
FROM employees e
WHERE e.department_id IN (
SELECT department_id
FROM departments
WHERE department_id = 1
);
SQLで同じテーブルの複数の列を結合するには、さまざまな方法があります。適切な方法は、状況と要件によって異なります。結合の種類と構文を理解することで、複雑なデータ分析を実行し、必要な情報を取得することができます。
sql join