SQLの結合の説明

SQL

SQLの結合(JOIN)は、複数のテーブルを結合して1つの結果セットを作成するための重要な機能です。以下に、図や表を交えた5つの結合の例を説明します。

1. INNER JOIN

目的: 両方のテーブルに共通する行のみを結合します。

: employees テーブルと departments テーブルを、共通の department_id で結合する。

SELECT e.employee_id, e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;

図解:

employees:
+-------------+------+---------------+
| employee_id | name | department_id |
+-------------+------+---------------+
| 1 | A | 101 |
| 2 | B | 102 |
| 3 | C | 103 |
+-------------+------+---------------+

departments:
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 101 | HR |
| 102 | Sales |
| 104 | IT |
+---------------+-----------------+

結果:
+-------------+------+-----------------+
| employee_id | name | department_name |
+-------------+------+-----------------+
| 1 | A | HR |
| 2 | B | Sales |
+-------------+------+-----------------+

2. LEFT JOIN (LEFT OUTER JOIN)

目的: 左側のテーブルの全行と、右側のテーブルの一致する行を結合します。右側のテーブルに一致する行がない場合、NULLを返します。

: employees テーブルと departments テーブルを、共通の department_id で結合する。

SELECT e.employee_id, e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;

図解:

employees:
+-------------+------+---------------+
| employee_id | name | department_id |
+-------------+------+---------------+
| 1 | A | 101 |
| 2 | B | 102 |
| 3 | C | 103 |
+-------------+------+---------------+

departments:
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 101 | HR |
| 102 | Sales |
| 104 | IT |
+---------------+-----------------+

結果:
+-------------+------+-----------------+
| employee_id | name | department_name |
+-------------+------+-----------------+
| 1 | A | HR |
| 2 | B | Sales |
| 3 | C | NULL |
+-------------+------+-----------------+

3. RIGHT JOIN (RIGHT OUTER JOIN)

目的: 右側のテーブルの全行と、左側のテーブルの一致する行を結合します。左側のテーブルに一致する行がない場合、NULLを返します。

: employees テーブルと departments テーブルを、共通の department_id で結合する。

SELECT e.employee_id, e.name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;

図解:

employees:
+-------------+------+---------------+
| employee_id | name | department_id |
+-------------+------+---------------+
| 1 | A | 101 |
| 2 | B | 102 |
| 3 | C | 103 |
+-------------+------+---------------+

departments:
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 101 | HR |
| 102 | Sales |
| 104 | IT |
+---------------+-----------------+

結果:
+-------------+------+-----------------+
| employee_id | name | department_name |
+-------------+------+-----------------+
| 1 | A | HR |
| 2 | B | Sales |
| NULL | NULL | IT |
+-------------+------+-----------------+

4. FULL JOIN (FULL OUTER JOIN)

目的: 両方のテーブルの全行を結合します。片方のテーブルに一致する行がない場合、NULLを返します。

: employees テーブルと departments テーブルを、共通の department_id で結合する。

SELECT e.employee_id, e.name, d.department_name
FROM employees e
FULL OUTER JOIN departments d ON e.department_id = d.department_id;

図解:

employees:
+-------------+------+---------------+
| employee_id | name | department_id |
+-------------+------+---------------+
| 1 | A | 101 |
| 2 | B | 102 |
| 3 | C | 103 |
+-------------+------+---------------+

departments:
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 101 | HR |
| 102 | Sales |
| 104 | IT |
+---------------+-----------------+

結果:
+-------------+------+-----------------+
| employee_id | name | department_name |
+-------------+------+-----------------+
| 1 | A | HR |
| 2 | B | Sales |
| 3 | C | NULL |
| NULL | NULL | IT |
+-------------+------+-----------------+

5. CROSS JOIN

目的: 2つのテーブルの全組み合わせを作成します。

: employees テーブルと departments テーブルを結合し、全組み合わせを取得します。

SELECT e.employee_id, e.name, d.department_name
FROM employees e
CROSS JOIN departments d;

図解:

employees:
+-------------+------+
| employee_id | name |
+-------------+------+
| 1 | A |
| 2 | B |
| 3 | C |
+-------------+------+

departments:
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 101 | HR |
| 102 | Sales |
| 104 | IT |
+---------------+-----------------+

結果:
+-------------+------+-----------------+
| employee_id | name | department_name |
+-------------+------+-----------------+
| 1 | A | HR |
| 1 | A | Sales |
| 1 | A | IT |
| 2 | B | HR |
| 2 | B | Sales |
| 2 | B | IT |
| 3 | C | HR |
| 3 | C | Sales |
| 3 | C | IT |
+-------------+------+-----------------+

これらの結合の例は、さまざまなデータ分析やデータ結合のタスクに使用されます。それぞれの結合方法を理解し、適切に使い分けることで、効率的なデータ処理が可能になります。

コメント

タイトルとURLをコピーしました