【SQL】JOIN使い方まとめ

JOINとは…

テーブルとテーブルをある特定のキーを使用して結合する構文。

INNER JOINは、マスターテーブルと対象テーブルで一致したレコードだけを結合し抽出する。主キーと一致しなかったマスターテーブルは抽出されない

OUTER JOINは、マスタテーブルはすべて抽出し、一致したレコードが対象テーブルにあれば抽出する。

内部結合 — INNER JOIN

2つのテーブルにある特定キーをもとにテーブルを結合する。

【例】台帳テーブルをマスタとし、商品idを主キーにして、一致したレコードだけを結合し抽出する。

SELECT 
  *
FROM
  台帳テーブル
INNER JOIN
  ON 台帳テーブル.商品id = 商品テーブル.商品id
;

台帳テーブル

台帳id商品id個数
121
241
313
432
554
662
791

商品テーブル

商品id製品名単価
1りんご100
2みかん120
3いちご400
4ばなな80
5かき240

商品idの赤字になっている箇所が一致。台帳テーブルに一致した商品テーブルをJOINし、一致しなかった台帳テーブルの下2つのレコードは表示しません

[結合後]台帳テーブル

台帳id商品id個数商品id製品名単価
1212みかん120
2414ばなな80
3131りんご100
4323いちご400
5545かき240

“INNER JOIN”は”JOIN”と省略できます。

外部結合 — OUTER JOIN

上記で使用したINNER JOINは一致しなかった台帳テーブルのレコードは表示されませんでした。

それに対し、OUTER JOINは、マスタとなるテーブルを全て抜き出し、主キーが一致する別テーブルのレコードを抜き出すことができます。

【例】台帳テーブルをマスタとし全て抜き出したあと、商品idを主キーにして、一致したレコードを結合し、抽出する。

SELECT 
  *
FROM
  台帳テーブル
OUTER JOIN
  ON 台帳テーブル.商品id = 商品テーブル.商品id
;

台帳テーブル

台帳id商品id個数
121
241
313
432
554
662
791

商品テーブル

商品id製品名単価
1りんご100
2みかん120
3いちご400
4ばなな80
5かき240

結合後、、、台帳テーブルに商品idが一致する商品テーブルのレコードのみを結合します。一致しなかった台帳テーブル(赤字)のレコードは結合部分はNULLですが、そのまま残ります。

[結合後]台帳テーブル

台帳id商品id個数商品id製品名単価
1212みかん120
2414ばなな80
3131りんご100
4323いちご400
5545かき240
662
791

どちらをマスタにするか? — LEFT/RIGHT OUTER JOIN

上記で作ったOUTER JOINはマスタはFROM句で使用したテーブル(台帳テーブル)としていました。

では、JOIN句で使用した商品テーブルをマスタにするときは?

上記のOUTER JOINの前に”RIGHT”をつけます。

SELECT 
  *
FROM
  台帳テーブル
RIGHT OUTER JOIN
  ON 台帳テーブル.商品id = 商品テーブル.商品id
;