[SQL]図で理解する外部結合と内部結合

はじめに

本記事はSQLについて、学びはじめたばかり、または結合って知ってるけどどうするんだっけと言った方を対象にした記事になっています。

結合を説明した記事は巷に溢れていますが、いきなりテーブルを使った説明も多く、まずは図から概念を理解してもらいそこから図、クエリと説明をすることでより理解が高まるのではないかと思い、そのような流れで説明していきます。結合は知ってるから、構文だけ教えてくれって方は、コードの部分だけ確認してもらえれば良いと思います。

外部結合(outer join)とは

外部結合とは? 
・ふたつのテーブルをくっつけて一つのテーブルのようにしてデータを扱う方法。
・テーブルを結合する際に、基準にするテーブルによって、右外部結合や左外部結合といった結合の種類がある。

左外部結合(LEFT OUTER JOIN)とは

ベン図で示したように、表Aと表Bにおいて、左の表Aを基準に、表Aと表Bの重複する部分を取得するのが、外部結合になる。

左外部結合では、上記のUserテーブルとPetsがあった場合には、Userテーブルのidを基準に、Petsテーブルのuser_idに値があるレコードを取得する。user_idが空または値が見つからない場合には、上記のようにnullが入る。

構文
構文では以下のように記載する。
LEFT OUTER JOINの部分が結合をしている処理、ON以降には結合の条件を記述し、カラムAとカラムBが一生である部分などの指定をする。

SELECT テーブル名.カラム名, ... FROM テーブル名1
  LEFT OUTER JOIN テーブル名2
  ON 結合の条件

■注意点
左のテーブルカラムを結合の対象にし、右側のカラムに同じ値が格納されているデータを結合して表示するが、左側のテーブルのカラムはすべて表示するので、右側のテーブルで結合対象のカラムが見つからない場合には、表示結果がNULLになる。

右外部結合(RIGHT OUTER JOIN)とは

ベン図で示したように、表Aと表Bにおいて、の表Bを全てと、表Aと表Bの重なりあう部分を取得するのが、外部結合になります。右とついているだけあって、右、図では表Bを基準にします。

左外部結合とは、逆で右のPetsテーブルを基準にUserテーブルのidとPetsテーブルのuser_idの値がかぶるレコードを取得する。

構文
構文では以下のように記載する。
RIGHT OUTER JOINの部分が結合をしている処理、ON以降には結合の条件を記述し、カラムAとカラムBが一緒である部分などの指定をする。

SELECT テーブル名.カラム名, ... FROM テーブル名1
  RIGHT OUTER JOIN テーブル名2
  ON 結合の条件

内部結合(INNER JOIN)とは

ベン図で示したように、表Aと表Bの重なりあう部分を取得するのが内部結合になります。外部結合とは違い、表A、表Bどちらにも属するデータが対象になります。

構文
構文では以下のように記載する。
INNER JOINの部分が結合をしている処理、ON以降には結合の条件を記述する。

SELECT テーブル名.カラム名, ... FROM テーブル名1
  INNER JOIN テーブル名2
  ON テーブル名1.カラム名1 = テーブル名2.カラム名2;

おわりに

今回はまず図で理解してから、コードを確認してみる形にしました、すこしでも結合について理解が深まれば幸いです。

また、結合には他にも、完全外部結合、クロス結合や自己結合もあるので時間がある時に調べられたらと思います。