SQL

SQL の 基本 INNER / OUTER JOIN で結合をマスター!

Kuni.W

SQL の中でも、複数のテーブルを結合 JOIN する方法は、 基本 中の基本です。結合の種類の中でよく使われる、内部結合 INNER JOIN と 外部結合 OUTER JOINがあります。目的に応じて、内部結合と外部結合を使い分ける必要があります。理解してマスターしましょう。

スポンサーリンク

結合方法の種類

結合 JOIN(ジョイン)といってもいくつか種類が存在します。

  • 直積結合(横方向積算結合)
  • 和集合(縦方向結合)
  • 内部結合    ⇐ 今回説明
  • 外部結合    ⇐ 今回説明

を覚えればある程度の結合処理はできると思います。

以下に各結合の説明を進めます。

内部結合(INNER JOIN インナージョイン)

SELECT * FROM テーブルA INNER JOIN テーブルB ON テーブルA.ID = テーブルB.ID;

意味:Aというテーブルと、Bというテーブルのうち、それぞれのIDが一致するものを、積算結合し、抽出する。

テーブルA

カラム1ID
A11
A22
A33

×

テーブルB

カラム2ID
B11
B24
B35

||

カラム1IDカラム2ID
A11B11

実は、この結果は、直積結合のWHERE句の条件指定した結果と同じなのです。

[https://way2se.ringtrees.com/sql-010/]

しかし、INNER JOIN の方が、

  • 結合条件が明確に指定できる
  • WHERE句による取得レコードの抽出

が使えることです。

直積結合と同じ結果に見えても、意図が明確ですし、後述する外部結合と使い分ける為に、INNER JOINの書き方をマスターした方が良いかもしれませんね。

外部結合(OUTER JOIN アウタージョイン)

SELECT * FROM テーブルA LEFT OUTER JOIN テーブルB ON テーブルA.ID = テーブルB.ID;

意味:Aというテーブルと、Bというテーブルのうち、それぞれのIDが一致するものを、積算結合し、抽出する。

テーブルA

カラム1ID
A11
A22
A33

×

テーブルB

カラム2ID
B11
B24
B35

||

カラム1IDカラム2
A11B1
A22
A33
4B2
5B3

内部結合と異なり、外部結合はどちらかのテーブルにない行(レコード)も取り出す方法です。一致しなかった値は、NULLとして設定されます。

内部結合と同じく、WHERE句が使えます。

補足

~ LEFT OUTER JOIN ~とありますが、~ RIGHT OUTER JOIN ~もあります。

テーブルの先に指定した方が左、後に指定した方が右となります。
今回はテーブルA(左)、テーブルB(右)となります。

RIGHT OUTER JOINとするなら、テーブルBを基準として、テーブルAが結合されます。

LEFT OUTER JOINとRIGHT OUTER JOINの違いは、基準にするテーブルを指定することになりますが、LEFT OUTER JOINを標準的に使う方が良いとされています。

その理由は、3つ以上のテーブルを結合する際の考えによります。

3つ以上の複数テーブルを結合する場合、1つ目(左)と2つ目(右)。
その結合した結果(左)と3つ目(右)・・・

という風に左側のテーブルを基準として、連続して結合していきます。

その際、基準が分かりにくくなるため、LEFT OUTER JOINを標準とする方が良いとされています。

その他、SQL構文は以下にて整理分類しています。

[https://way2se.ringtrees.com/sql-001/]

ABOUT ME
記事URLをコピーしました