SQL

【SQL】内部結合・左外部結合・右外部結合・完全外部結合の違いを分かりやすく解説

【SQL】内部結合・左外部結合・右外部結合・完全外部結合の違いを分かりやすく解説

SQLの結合(Join)には主に以下の4種類があります。

  • 内部結合(Inner Join)
  • 左外部結合(Left Outer Join)
  • 右外部結合(Right Outer Join)
  • 完全外部結合(Full Outer Join)

 

今回は、これらの結合の意味と違いをを図を交えて分かりやすく解説します。

少しでもSQLへの理解を深める上で参考になれば幸いです。

 

【SQL】内部結合・左外部結合・右外部結合・完全外部結合の違いを分かりやすく解説

SQLにおける「結合」とは何かについてまずは解説します。

SQLにおける結合(Join)とは何か?

SQLにおける結合(Join)とは、要は複数のテーブルをまとめて一つのテーブルにすることです。

一つのテーブルにすることで、テーブルをまたいだ条件の指定やデータの抽出が容易になります。

SQLにおける基礎中の基礎であり、エンジニアの実務でも頻繁に使われる手法です。

 

内部結合(Inner Join)とは

次に、それぞれの結合について解説していきます。

まずは内部結合(Inner Join)からです。

 

内部結合とは、一言でいうと、条件にマッチしないデータは除外して結合する方法です。

テーブル間で関連のあるデータのみを抽出して結合する方法と言い換えることもできます。

 

言葉だけでは分かりにくいと思うので、図を交えて解説しましょう。

以下のような二つのテーブルがあるとします。

universitiesテーブルはusersテーブルとuniversity_idで紐づいている

 

このテーブルに対して、以下のSQLで内部結合を実行します。

SELECT * FROM users INNER JOIN universities ON users.university_id = universities.id;

 

すると、以下のテーブルが生成されます。

内部結合(Inner Join)

 

usersテーブルのuniversity_idとuniversitiesテーブルのidが一致するデータが結合され、それ以外のデータは除外されています。

このように、条件と一致するデータ以外のデータは除外してテーブルを結合するのが内部結合(Inner Join)です。

外部結合(Outer Join)とは

次に、外部結合(Outer Join)について説明します。

外部結合は、一言でいうと、条件にマッチしないデータも含めて結合する方法です。

 

これも言葉だけでは分かりにくいと思うので、図を交えて説明していきます。

以下のような二つのテーブルがあるとします。

テーブル

 

このテーブルに対して、以下のSQLで外部結合(左外部結合)を実行します。

SELECT * FROM users LEFT OUTER JOIN universities ON users.university_id = universities.id;

 

すると、以下のテーブルになります。

外部結合(Outer Join)

 

usersテーブルのuniversity_idとuniversitiesテーブルのidが一致するデータが結合されるところまでは内部結合と同じですが、外部結合では、条件に一致しないデータも残されています。

このように、条件と一致するデータ以外のデータも残してテーブルを結合するのが外部結合(Outer Join)の特徴です。

 

※ここでは「左外部結合」を例にしたため、左側のテーブル(FROMで指定したテーブル)のデータが残されていますが、どのレコードを残すかによって、他にも右外部結合・完全外部結合があります。これらについては後ほど解説します。

内部結合と外部結合の違いをベン図で

内部結合と外部結合の違いはベン図で表すと分かりやすいです。

 

内部結合は、ベン図で表すと以下のようになります。

条件に一致するデータのみ取得する形です。

内部結合のベン図

 

一方、外部結合(左外部結合)の場合は、条件と一致しないデータも併せて結合します。

外部結合のベン図

 

左外部結合(Left Outer Join)とは

内部結合と外部結合の違いについて理解したところで、今度は外部結合について深掘りしましょう。

外部結合には3種類あります。左外部結合・右外部結合・完全外部結合です。

まずは左外部結合から解説します。

 

といっても、左外部結合は先ほどの外部結合のところでも説明しました。

以下のようなテーブルがあるとすると、

テーブル

 

次のSQLを実行することで以下のテーブルが作成されます。

SELECT * FROM users LEFT OUTER JOIN universities ON users.university_id = universities.id;

 

左外部結合(Left Outer Join)

 

特徴は、条件が一致しない場合に、左側のテーブル(FROMで指定したテーブル)のデータを残す点です。(左側のテーブルを軸にする)

 

また、取得するデータをベン図で表すと以下のようになります。

左外部結合(Left Outer Join)のベン図

 

右外部結合(Right Outer Join)とは

次に右外部結合(Right Outer Join)です。

以下のテーブルがあります。

テーブル

 

このテーブルに対して、以下のSQLで右外部結合を実行します。

SELECT * FROM users RIGHT OUTER JOIN universities ON users.university_id = universities.id;

 

すると、以下のテーブルが作成されます。

右外部結合(Right Outer Join)

 

特徴は、条件が一致しない場合に、右側のテーブルのデータを残す点です。(右側のテーブルを軸にする)

 

また、取得するデータをベン図で表すと以下のようになります。

右外部結合(Right Outer Join)のベン図

完全外部結合(Full Outer Join)とは

最後に完全外部結合(Full Outer Join)です。

以下のテーブルがあります。

テーブル

 

このテーブルに対して、以下のSQLで完全外部結合を実行します。

SELECT * FROM users FULL OUTER JOIN universities ON users.university_id = universities.id;

 

すると、以下のテーブルが作成されます。

完全外部結合(Full Outer Join)

 

特徴は、条件が一致しない場合に、両方のテーブルのデータを残す点です。(両方のテーブルを軸にする)

 

また、取得するデータをベン図で表すと以下のようになります。

完全外部結合(Full Outer Join)のベン図

 

【SQL】内部結合・左外部結合・右外部結合・完全外部結合の違いを分かりやすく解説 まとめ

最後に今回の内容をまとめます。

内部結合と外部結合の違い
  • 内部結合・・・条件にマッチしないデータは除外して結合する
  • 外部結合・・・条件にマッチしないデータも含めて結合する

 

3種類の外部結合について
  • 左外部結合・・・条件が一致しない場合に、左側のテーブルのデータを残す
  • 右外部結合・・・条件が一致しない場合に、右側のテーブルのデータを残す
  • 完全外部結合・・・条件が一致しない場合に、両方のテーブルのデータを残す

 

今回は以上となります。

この記事によって、あなたのSQLに対する理解が少しでも深まっていたら嬉しいです。

 

最後まで読んで頂きありがとうございました。

 

SQL 結合(Join) 参考書籍

SQLをこれから学びたい人にはかなりおすすめの本です。

この本の内容をしっかりと理解しておけば、実務で困ることはほとんどないでしょう。

COMMENT

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

CAPTCHA