一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • 【SQL】テーブル結合(外部結合-OUTER JOIN編)

テーブルの結合について、自分なりにまとめてみた。
前回の内部結合編から続いて、今回は外部結合編をお送りいたします。

概要

外部結合は、内部結合のようにそれぞれのテーブルの指定したカラムの値が一致するものを結合するのに加え、どちらかのテーブルにしか存在しないものに関しても取得する。
基本的な構文は以下の通り。

SELECT カラム名1,カラム名2,…….
FROM テーブル1(左側)
 LEFT(RIGHT) OUTER JOIN テーブル名2(右側)
  ON 結合の条件

SQL中にLEFTやRIGHTの記載があるが、内容は以下の通り

  • LEFT OUTER JOIN : 左側のテーブルを軸にして外部結合を行う方法
  • RIGHT OUTER JOIN : 右側のテーブルを軸にして外部結合を行う方法

以下の例示では、使用するテーブルとデータはそのままに
SQLの「LEFT」と「RIGHT」部分だけを変更して結果の変わりようも示す。

例示①:LEFT OUTER JOIN

◆基準となるテーブル:子供テーブル(Kodomo)

◆結合させるテーブル:親テーブル(Oya)

◆結合条件:子供テーブルの「oya_id」 と 親テーブルの「id」 が一致するデータ

子供テーブル(基準となるテーブル):Kodomo

id name oya_id
1 ichiro 1
2 jiro 2
3 saburo 1
4 shiro 4

親テーブル(結合させるテーブル):Oya

id name
1 taro
2 hanako
3 gonzou

(SQL)

SELECT * FROM Kodomo –基準となるテーブル(左側)
 LEFT OUTER JOIN Oya –結合させるテーブル(右側)
  ON Kodomo.oya_id = Oya.id; –結合条件1(※この後にANDで複数条件も可能)

(結果)
子供テーブルは全量表示(基準となるテーブルのため。WHERE句で条件指定してれば全量表示とは限らない)
結合条件に一致しない、親テーブル.id=3(gonzou)がSELECTされずに「null」埋めされる。

id name oya_id id name
1 ichiro 1 1 taro
2 jiro 2 2 hanako
3 saburo 1 1 taro
4 shiro 4 null null

例示②:RIGHT OUTER JOIN

◆結合させるテーブル:子供テーブル(Kodomo)

◆基準となるテーブル:親テーブル(Oya)

◆結合条件:子供テーブルの「oya_id」 と 親テーブルの「id」 が一致するデータ

※データ内容は上記(LEFT OUTER JOIN)と同じため割愛

(SQL)

SELECT * FROM Kodomo –結合させるテーブル(左側)
 RIGHT OUTER JOIN Oya –基準となるテーブル(右側)
  ON Kodomo.oya_id = Oya.id; –結合条件1(※この後にANDで複数条件も可能)

(結果)
親テーブルは全量表示(基準となるテーブルのため。WHERE句で条件指定してれば全量表示とは限らない)
結合条件に一致しない、子供テーブル.oya_id=4(shiro)がSELECTされずに「null」埋めされる。

id name oya_id id name
1 ichiro 1 1 taro
3 saburo 1 1 taro
2 jiro 2 2 hanako
null null null 3 gonzou

まとめ・・・

1.LEFT OUTER JOINなら左側(FROM句の後)のテーブルを基準に表示
2.RIGHT OUTER JOINなら右側(JOIN句の後)のテーブルを基準に表示
3.マッチするレコードが複数あった場合、1,2レコード目のように、マージしたものをそれぞれ別のレコードにする。
4.条件にマッチするレコードがないものは、基準としないテーブルはすべてnull表示される。

The following two tabs change content below.

檜山

よろしくお願いいたします。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア