支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • 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を使用することが多いので、まずはこの二つの結合だけでも活用できるようになれば大丈夫でしょう。

本稿が皆様のお役に立てれば幸いです。最後までお読みいただきありがとうございます。