データベース設計

【SQL入門】OUTER JOINの使い方(テーブル外部結合)

SQLの「OUTER JOIN」を使えば、テーブルを外部結合することができます。

(左)外部結合の基本構文

SELECT 列名
FROM テーブル名1  LEFT OUTER JOIN  テーブル名2  ON  結合条件;

(右)外部結合の基本構文

SELECT 列名
FROM テーブル名1  RIGHT OUTER JOIN テーブル名2  ON  結合条件;

※OUTERは省略可

本記事では、テーブルの外部結合を行う方法を解説していきます。

テーブルの外部結合

テーブルの結合には「内部結合」と「外部結合」があります。

「内部結合」とは両方のテーブルに存在するデータを抽出する結合のことで、「外部結合」とは、基準となるテーブルに存在すれば抽出する結合のことです。

左側のテーブルを基準とするのが「左外部結合」(LEFT OUTER JOIN)です。

[左外部結合のイメージ例]

以下の例では、LEFT OUTER JOINを使い「userテーブル」と「departmentテーブル」を「user.department_id = department.id」の条件で左外部結合しています。

■LEFT OUTER JOINを使った左外部結合の例

SELECT user.id, user.name, department.name
FROM user
LEFT OUTER JOIN department ON user.department_id = department.id;

左外部結合した結果、基準となる「user」テーブルに存在するデータを抽出して、「department」テーブルからは条件に一致したデータのみ抽出しています。

そのため、部署IDが「user」テーブルにしか存在しない部署ID「4」のレコードは、「user」テーブルの項目(カラム)である社員ID、社員名しか設定されていません。(部署名はNULLとなります)

右外部結合(RIGHT OUTER JOIN)

右側のテーブルを基準とするのが「右外部結合」(RIGHT OUTER JOIN)です。

[右外部結合のイメージ例]

以下の例では、RIGHT OUTER JOINを使い「userテーブル」と「departmentテーブル」を「user.department_id = department.id」の条件で右外部結合しています。

SELECT user.id, user.name, department.name
FROM user
RIGHT OUTER JOIN department ON user.department_id = department.id;

右外部結合した結果、基準となる「department」テーブルに存在するデータを抽出し、「user」テーブルからは条件に一致したデータのみ抽出しています。

そのため、部署IDが「department」テーブルにしか存在しない部署ID「3」のレコードは、「department」テーブルの項目(カラム)である部署名しか設定されていません。(社員ID、社員名はNULLとなります)

学習書の紹介

プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに

SQLの第一人者であるジョー・セルコの名著『Joe Celkos SQL for Smarties, Fourth Edition: Advanced SQL Programming』の日本語版です。本書は、SQLの実務経験があるエンジニアを対象として、SQLプログラミングの基礎的な考え方から、テーブル操作、グループ化、集計関数、クエリの最適化など、SQL全般について詳しく解説した「SQLプログラミングバイブル」です。基本から高度なテクニックまで、網羅的にSQLプログラミングの知識を習得できます。翻訳・監修は『達人に学ぶSQL徹底指南書』でおなじみのミック氏が担当。

SQLエンジニア必携の一冊です。

-データベース設計