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)」からです。
内部結合とは、一言でいうと、「条件にマッチしないデータは除外して結合する方法」です。
「テーブル間で関連のあるデータのみを抽出して結合する方法」と言い換えることもできます。
言葉だけでは分かりにくいと思うので、図を交えて解説しましょう。
以下のような二つのテーブルがあるとします。

このテーブルに対して、以下のSQLで内部結合を実行します。
SELECT * FROM users INNER JOIN universities ON users.university_id = universities.id;
すると、以下のテーブルが生成されます。

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;
すると、以下のテーブルになります。

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;

特徴は、条件が一致しない場合に、左側のテーブル(FROMで指定したテーブル)のデータを残す点です。(左側のテーブルを軸にする)
また、取得するデータをベン図で表すと以下のようになります。

右外部結合(Right Outer Join)とは
次に右外部結合(Right Outer Join)です。
以下のテーブルがあります。

このテーブルに対して、以下のSQLで右外部結合を実行します。
SELECT * FROM users RIGHT OUTER JOIN universities ON users.university_id = universities.id;
すると、以下のテーブルが作成されます。

特徴は、条件が一致しない場合に、右側のテーブルのデータを残す点です。(右側のテーブルを軸にする)
また、取得するデータをベン図で表すと以下のようになります。

完全外部結合(Full Outer Join)とは
最後に完全外部結合(Full Outer Join)です。
以下のテーブルがあります。

このテーブルに対して、以下のSQLで完全外部結合を実行します。
SELECT * FROM users FULL OUTER JOIN universities ON users.university_id = universities.id;
すると、以下のテーブルが作成されます。

特徴は、条件が一致しない場合に、両方のテーブルのデータを残す点です。(両方のテーブルを軸にする)
また、取得するデータをベン図で表すと以下のようになります。

【SQL】内部結合・左外部結合・右外部結合・完全外部結合の違いを分かりやすく解説 まとめ
最後に今回の内容をまとめます。
- 内部結合・・・条件にマッチしないデータは除外して結合する
- 外部結合・・・条件にマッチしないデータも含めて結合する
- 左外部結合・・・条件が一致しない場合に、左側のテーブルのデータを残す
- 右外部結合・・・条件が一致しない場合に、右側のテーブルのデータを残す
- 完全外部結合・・・条件が一致しない場合に、両方のテーブルのデータを残す
今回は以上となります。
この記事によって、あなたのSQLに対する理解が少しでも深まっていたら嬉しいです。
最後まで読んで頂きありがとうございました。
SQL 結合(Join) 参考書籍
SQLをこれから学びたい人にはかなりおすすめの本です。
この本の内容をしっかりと理解しておけば、実務で困ることはほとんどないでしょう。