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 |
+-------------+------+-----------------+
これらの結合の例は、さまざまなデータ分析やデータ結合のタスクに使用されます。それぞれの結合方法を理解し、適切に使い分けることで、効率的なデータ処理が可能になります。
コメント