【RDB】OUTER JOINとは?INNER JOINとの関係を絡めて紹介

ここではRDBにおけるOUTER JOIN(外部結合)を解説します。概要を理解しやすくするため、まずは「結合」から考えていきたいと思います。

RDBにおける「結合」とは

リレーショナルデータベースにおける「結合」とは、2つ以上のテーブルを共通の値を持つカラムを「糊」にしてくっつけることで、一つの表にしてしまうことをいいます。例えば下のSQLは、「userのidを『糊』にしてparticipantsテーブルとusersテーブルを結合した」結果を出力します。

SELECT *
  FROM participants, users
  WHERE participants.user_id=users.id;

実は、このSQLで行われているのが「内部結合(INNER JOIN)」です。指定したカラムの値が一致するレコードのみを抽出するという手法です。言い換えると内部結合では、結合元のテーブルのいずれかにないレコードは抽出対象になりません。

そしていずれかのテーブルにないレコードも抽出対象に含めるのが、外部結合(OUTER JOIN)なのです。

外部結合(OUTER JOIN)

そんな外部結合は、「ないレコードの含め方」によってさらに3つの種類に分かれます。

①左外部結合(LEFT OUTER JOIN)

左外部結合(LEFT OUTER JOIN)は、2つのテーブルのうち「FROM」で指定した方のテーブルの全データを取り出して、「JOIN」で指定した方のテーブルのうち該当レコードをくっつける、という処理を行います。例えば下のSQLはusersテーブルとparticipantsテーブルの左外部結合を行うものですが、partipantsテーブルでのレコードのあるなしに関わらず、usersテーブルのレコードは全件抽出されます。

SELECT *
  FROM users
  LEFT JOIN participants;

②右外部結合(RIGHT OUTER JOIN)

右外部結合(RIGHT OUTER JOIN)は左外部結合とは逆に、「JOIN」で指定した方のテーブルから全データを抽出し、「FROM」で指定した方のテーブルの該当レコードを結合します。ちなみに慣用的には、一般的にLEFT OUTER JOINを利用するケースが多い印象です。

③完全外部結合(FULL OUTER JOIN)

そして完全外部結合(FULL OUTER JOIN)では、いずれのテーブルからも全データを取り出して結合を行います。もしお互いに存在しない部分には、「NULL」値が入ることになります。

参考

返信がありません

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です