開発運用

SQL テーブル結合の種類

SQLにおける「テーブルの結合」は、データベース内の複数のテーブルから情報を取得するために非常に重要な概念です。テーブルを結合することで、異なるテーブルに格納されているデータを効率的に関連付けて、複雑なクエリを実行できるようになります。SQLでは、テーブルを結合する方法として、主に7つの異なるタイプがあります。それぞれの結合タイプは異なる用途と目的を持ち、適切に使い分けることが求められます。本記事では、SQLにおける7種類のテーブル結合方法について、詳細かつ包括的に解説します。

1. INNER JOIN(内部結合)

INNER JOINは、最も一般的に使用されるテーブル結合の方法で、2つ以上のテーブルに共通する行のみを選択します。つまり、結合条件に一致するデータが両方のテーブルに存在する場合に、そのデータを結果として返します。

例:

sql
SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.department_id;

上記のクエリでは、employeesテーブルとdepartmentsテーブルをdepartment_idをキーにして結合し、両方のテーブルに一致するデータ(つまり、department_idが一致する従業員と部署名)を取得します。

2. LEFT JOIN(左外部結合)

LEFT JOINは、左側のテーブル(最初に指定されたテーブル)のすべての行を選択し、右側のテーブルの一致する行があればそれを結合します。右側のテーブルに一致する行がない場合、右側のテーブルにはNULL値が返されます。

例:

sql
SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;

このクエリでは、employeesテーブルのすべての行が結果に含まれ、departmentsテーブルに一致するデータがない場合は、department_nameにNULLが表示されます。

3. RIGHT JOIN(右外部結合)

RIGHT JOINは、LEFT JOINの逆で、右側のテーブルのすべての行を選択し、左側のテーブルの一致する行があればそれを結合します。左側のテーブルに一致する行がない場合、左側のテーブルにはNULL値が返されます。

例:

sql
SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id;

このクエリでは、departmentsテーブルのすべての行が結果に含まれ、employeesテーブルに一致するデータがない場合は、employees.nameにNULLが表示されます。

4. FULL OUTER JOIN(完全外部結合)

FULL OUTER JOINは、左側および右側のテーブルの両方からすべての行を選択します。結合条件に一致する行がない場合、NULLが返されます。この結合は、LEFT JOINとRIGHT JOINの両方の結果を合わせたものです。

例:

sql
SELECT employees.name, departments.department_name FROM employees FULL OUTER JOIN departments ON employees.department_id = departments.department_id;

このクエリでは、employeesdepartmentsの両方のテーブルからすべての行が取得されます。一致するデータがない場合は、NULLが返されます。

5. CROSS JOIN(クロス結合)

CROSS JOINは、2つのテーブルのすべての組み合わせを返します。結合条件は指定せず、テーブルAの行数とテーブルBの行数を掛け合わせた行数が結果として返されます。CROSS JOINは通常、全組み合わせが必要な場合に使用します。

例:

sql
SELECT employees.name, departments.department_name FROM employees CROSS JOIN departments;

このクエリでは、employeesテーブルの各従業員に対して、departmentsテーブルのすべての部署名が組み合わさった結果が返されます。例えば、employeesに5人の従業員が、departmentsに3つの部署がある場合、結果は15行になります。

6. SELF JOIN(自己結合)

SELF JOINは、同じテーブルを2回以上使用して結合する方法です。通常、自己結合を使用して、同じテーブル内の異なる行を比較します。SELF JOINを使用する際には、テーブルにエイリアスをつけて区別します。

例:

sql
SELECT e1.name AS employee_name, e2.name AS manager_name FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.employee_id;

このクエリでは、employeesテーブルを2回使用し、従業員とそのマネージャーを結びつけています。e1は従業員を、e2はマネージャーを表します。

7. NATURAL JOIN(自然結合)

NATURAL JOINは、2つのテーブルで名前が同じ列を自動的に結合します。結合条件を明示的に指定する必要はなく、共通の列名を持つすべての列が結合に使用されます。ただし、同じ列名が複数存在する場合、意図しない結果を招くことがあるため、注意が必要です。

例:

sql
SELECT name, department_name FROM employees NATURAL JOIN departments;

このクエリでは、employeesdepartmentsテーブルの共通の列(たとえば、department_id)で自動的に結合されます。

結論

SQLにおけるテーブルの結合は、データベース内で効率的に情報を取得するために不可欠な技術です。INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN、CROSS JOIN、SELF JOIN、そしてNATURAL JOINと、それぞれの結合方法は特定の目的に応じて使い分けることが重要です。これらの結合を理解し、適切に使うことで、複雑なデータ抽出を効率的に行うことができます。

Back to top button