😎
SQL結合の基本: 内部結合と外部結合の違い
データベース操作の際に避けて通れないのがテーブル間の「結合」です。本記事では、SQLの結合方法である「内部結合」と「外部結合」の違いと使い方について詳しく解説します。
前提: テーブル構造
今回は以下の2つのテーブルを例に説明します。
-
TableA: 従業員情報。
employee_idとnameを持つ。 -
TableB: 従業員のスコア情報。
employee_score_idがユニークなID、employee_idが従業員情報のリレーション、scoreがスコア。
TableA:
| employee_id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
TableB:
| employee_score_id | employee_id | score |
|---|---|---|
| 101 | 1 | 100 |
| 102 | 2 | 85 |
| 103 | 4 | 95 |
内部結合 (INNER JOIN)
内部結合では、2つのテーブルに共通するデータのみを取得します。
SELECT A.employee_id, A.name, B.score
FROM TableA A
INNER JOIN TableB B ON A.employee_id = B.employee_id;
結果:
| employee_id | name | score |
|---|---|---|
| 1 | Alice | 100 |
| 2 | Bob | 85 |
左外部結合 (LEFT JOIN)
左側のテーブルを基準にして結合します。右側のテーブルに該当するデータがない場合は、その部分はNULLで表示されます。
SELECT A.employee_id, A.name, B.score
FROM TableA A
LEFT JOIN TableB B ON A.employee_id = B.employee_id;
結果:
| employee_id | name | score |
|---|---|---|
| 1 | Alice | 100 |
| 2 | Bob | 85 |
| 3 | Carol | NULL |
右外部結合 (RIGHT JOIN)
右側のテーブルを基準にして結合します。左側のテーブルに該当するデータがない場合は、その部分はNULLで表示されます。
SELECT A.employee_id, A.name, B.score
FROM TableA A
RIGHT JOIN TableB B ON A.employee_id = B.employee_id;
結果:
| employee_id | name | score |
|---|---|---|
| 1 | Alice | 100 |
| 2 | Bob | 85 |
| NULL | NULL | 95 |
完全外部結合 (FULL JOIN)
両テーブルのデータを全て表示し、該当するデータがない場合はNULLで表示します。
SELECT A.employee_id, A.name, B.score
FROM TableA A
FULL JOIN TableB B ON A.employee_id = B.employee_id;
結果:
| employee_id | name | score |
|---|---|---|
| 1 | Alice | 100 |
| 2 | Bob | 85 |
| 3 | Carol | NULL |
| NULL | NULL | 95 |
以上、SQLの内部結合と外部結合の基本についての解説でした。実際のデータベース操作では、これらの結合方法を適切に使い分けることで、効率的なデータ取得が可能になります。
Discussion