INNER JOIN(内部結合)とOUTER JOIN(外部結合)の違い

当記事の想定
  • 社員は1人につき1台の社用スマホを貸与されているが、入社間もない桃子は現時点では社用スマホを貸与されていない
  • 6台の社用スマホのうち、2台(id:2とid:6)は誰にも貸与されていない
テーブルの内容

INNER JOIN(内部結合)

両方のテーブルのレコードのうち、指定したカラムの値が一致するレコードのみを取得する。

以下の場合は社用スマホを貸与されている社員とその電話番号が表示される。

逆に、社用スマホを持たない社員(id:5の桃子)と、誰にも貸与されていない社用スマホ(id:2とid:6)は表示されない。

INNER JOIN

指定したカラムの値が一致するかどうかが取得する or しないの判断基準なので、結合時にテーブルの順番を入れ替えても取得できるレコード内容は同じ(カラムの並びは当然違う)。

INNER JOIN

OUTER JOIN(外部結合)

両方のテーブルのレコードのうち、指定したカラムの値が一致するレコードのみを取得するのはINNER JOINと一緒。

それに加えて片方のテーブルにしか存在しないレコードも取得する。

LEFT JOIN

左側のテーブル(先に指定したテーブル)のレコードは必ず取得する。結合するレコードがないときはNULLになる。

以下の場合だと桃子はまだ社用スマホを貸与されていないのでNULLとなる。

「LEFT JOIN」の通り、左側のテーブル(= employee)が基準となるので、誰にも貸与されていない社用スマホ(id:2とid:6)は表示されない。

LEFT OUTER JOIN

テーブルを入れ替えると左側のphoneテーブルのレコードを全部取得した上でemployeeテーブルを結合するので、誰にも貸与されていないスマホはNULLになる。

LEFT OUTER JOIN

RIGHT JOIN

右側のテーブル(後に指定したテーブル)のレコードは必ず取得する。結合するレコードがないときはNULLになる。

以下の場合だと右側のphoneの全レコードを取得した上で左側にemployeeテーブルを結合するので、誰にも貸与されていないスマホ(id:2とid:6)はNULLになる。

RIGHT OUTER JOIN

テーブルを入れ替えると右側のemployeeの全レコードを取得した上で左側にphoneテーブルを結合する。

社用スマホを貸与されていない桃子はNULLになり、また、誰にも貸与されていないスマホ(id:6)のレコードは表示されない。

RIGHT OUTER JOIN

LEFT OUTER JOIN と RIGHT OUTER JOINの入れ替え

LEFT OUTER JOINとRIGHT OUTER JOINは以下のように入れ替えると同じレコード内容を取得できる。

ただし、カラムの順番は異なるのでそこはSELECT句で調整しないといけない。

LEFT OUTER JOIN と RIGHT OUTER JOINの入れ替え

コメントを残す

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