SQLの内部結合と外部結合について
はじめに
本稿ではデータベースからデータを抽出する際に使用するクエリであるSQLについて紹介していきます。SQLの中でも複数のテーブルからデータを抽出するJOIN(結合)について紹介していきます。
INNER JOINとOUTER JOIN
本稿ではINNER JOINと三種類のOUTER JOIN(LEFT、RIGHT、FULL)についてサンプルテーブルとサンプルコードを例に紹介していきます。今回以下のEmployeeテーブルとDepartmentテーブルを結合していきます。
【Employeeテーブル】 | |||
---|---|---|---|
id | name | age | department_id |
001 | 山田太郎 | 25 | 01 |
002 | 佐藤次郎 | 46 | 02 |
003 | 山本三郎 | 30 | 05 |
004 | 横山四郎 | 25 | 03 |
【Departmentテーブル】 | |
---|---|
department_id | department_name |
01 | 開発 |
02 | インフラ |
03 | IT事務 |
04 | 営業 |
INNER JOIN(内部結合)について
INNER JOINは、二つのテーブルから指定したカラムの値が一致するデータを結合、抽出することができます。
-- サンプルコード
SELECT *
FROM Employee
INNER JOIN Department
ON Employee.department_id = Department.department_id
EmployeeテーブルとDepartmentテーブルをINNER JOINした結果は以下の通りになります。
【抽出結果】 | |||||
---|---|---|---|---|---|
id | name | age | department_id | department_id | department_name |
001 | 山田太郎 | 25 | 01 | 01 | 開発 |
002 | 佐藤次郎 | 46 | 02 | 02 | インフラ |
004 | 横山四郎 | 25 | 03 | 03 | IT事務 |
LEFT OUTER JOIN(左外部結合)について
LEFT OUTER JOINは、左側のテーブルを軸にして、二つのテーブルから指定したカラムの値が一致するデータを結合することができます。
-- サンプルコード
SELECT *
FROM Employee
LEFT OUTER JOIN Department
ON Employee.department_id = Department.department_id
EmployeeテーブルとDepartmentテーブルをLEFT OUTER JOINした結果は以下の通りになります。
【抽出結果】 | |||||
---|---|---|---|---|---|
id | name | age | department_id | department_id | department_name |
001 | 山田太郎 | 25 | 01 | 01 | 開発 |
002 | 佐藤次郎 | 46 | 02 | 02 | インフラ |
004 | 横山四郎 | 25 | 03 | 03 | IT事務 |
003 | 山本三郎 | 30 | 05 | (null) | (null) |
RIGHT OUTER JOIN(右外部結合)について
RIGHT OUTER JOINは、右側のテーブルを軸にして、二つのテーブルから指定したカラムの値が一致するデータを結合することができます。
-- サンプルコード
SELECT *
FROM Employee
RIGHT OUTER JOIN Department
ON Employee.department_id = Department.department_id
EmployeeテーブルとDepartmentテーブルをRIGHT OUTER JOINした結果は以下の通りになります。
【抽出結果】 | |||||
---|---|---|---|---|---|
id | name | age | department_id | department_id | department_name |
001 | 山田太郎 | 25 | 01 | 01 | 開発 |
002 | 佐藤次郎 | 46 | 02 | 02 | インフラ |
004 | 横山四郎 | 25 | 03 | 03 | IT事務 |
(null) | (null) | (null) | (null) | 04 | 営業 |
FULL OUTER JOIN(完全外部結合)について
FULL OUTER JOINは、LEFT OUTER JOINとRIGHT OUTER JOINを組み合わせたような結合方法になります。
-- サンプルコード
SELECT *
FROM Employee
FULL OUTER JOIN Department
ON Employee.department_id = Department.department_id
EmployeeテーブルとDepartmentテーブルをFULL OUTER JOINした結果は以下の通りになります。
【抽出結果】 | |||||
---|---|---|---|---|---|
id | name | age | department_id | department_id | department_name |
001 | 山田太郎 | 25 | 01 | 01 | 開発 |
002 | 佐藤次郎 | 46 | 02 | 02 | インフラ |
004 | 横山四郎 | 25 | 03 | 03 | IT事務 |
(null) | (null) | (null) | (null) | 04 | 営業 |
003 | 山本三郎 | 30 | 05 | (null) | (null) |
まとめ
本稿ではINNER JOINと3種類のOUTER JOINについて紹介してきました。結合は上手く活用することで、とてもテーブルを見やすくすることができます。
筆者の体感では、INNER JOINとLEFT OUTER JOINを使用することが多いので、まずはこの二つの結合だけでも活用できるようになれば大丈夫でしょう。
本稿が皆様のお役に立てれば幸いです。最後までお読みいただきありがとうございます。