😎
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