0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[SQL備忘録] 図解で紐解く!5つの結合の基本

0
Posted at

はじめに

前回の記事で「マスター」と「トランザクション」に分けたテーブル。
今回は、それらを結合する5つの方法についてまとめました。
「どのデータが残って、どのデータが消えるのか」を意識していきます。


1. 内部結合(INNER JOIN)

一番よく使われる結合です。 「両方のテーブルに共通して存在するデータ」 だけを取り出します。

1.jpg

  • 例: 売上記録があり、かつ商品マスターにも登録されているデータのみ表示
  • 結果: 商品登録がない売上や、一度も売れていない商品は表示されない

2. 左外部結合(LEFT OUTER JOIN)

「左側(FROM句)のテーブル」を主役にする結合です。

2.jpg

  • 例: すべての売上記録(左)を表示し、商品情報(右)があればくっつける
  • ポイント: マスターにない商品が売れた場合、商品名は NULL になるが、売上記録自体は消えずに残る

3. 右外部結合(RIGHT OUTER JOIN)

「右側(JOIN句)のテーブル」を主役にする結合です。

3.jpg

  • 例: すべての商品マスター(右)を表示し、売上記録(左)があればくっつける
  • ポイント: 「一度も売れていない商品(りんご等)」もすべてリストアップしたい時に便利
  • 備考: 実務では LEFT JOIN に書き換えることが多いため、見かける機会は少なめ

4. 全外部結合(FULL OUTER JOIN)

「左右どちらかに存在すればすべて出す」 という、欲張りな結合です。

4.jpg

  • 例: 売上記録も商品マスターも、一致していようがいまいが全部出したいとき
  • 注意: MySQLなど一部のDBでは直接サポートされていないため、LEFT JOINRIGHT JOINUNION でつなぐ工夫が必要な場合がある

5. 交差結合(CROSS JOIN)

ちょっと特殊な結合で、 「すべての組み合わせ(掛け合わせ)」 を作ります。

  • イメージ: 「5種類の商品」 × 「3つの店舗」 = 「15通りの在庫表」
  • 数学用語: 直積(デカルト積)と呼ばれる
Aテーブル Bテーブル
りんご A店
キャベツ B店

これをCROSS JOINすると

  1. りんご × A店
  2. りんご × B店
  3. キャベツ × A店
  4. キャベツ × B店
    ...という風に、マトリックス状にデータが生成されます。
  • 例: 5種類の商品 × 3つの店舗 = 15行の「全店舗の商品展開リスト」を作るとき
  • 注意: 結合条件(ON)を書かない。データ量が多いテーブル同士でやると、結果が膨大になるので注意

まとめ:使い分けのチェックリスト

結合の種類 出てくるデータ よく使うシーン
INNER 両方にあるものだけ 普通の売上集計
LEFT 左側は全部 売上漏れをチェックしたい時
RIGHT 右側は全部 売れていない商品を知りたい時
FULL 全部 データの全容を突合したい時
CROSS 全組み合わせ 予定表やマスターの雛形作成

Tips:実は「INNER」と「OUTER」は省略できる!
実務のコードでは、以下のように短く書くのが一般的です。

INNER JOIN → JOIN
LEFT OUTER JOIN → LEFT JOIN
RIGHT OUTER JOIN → RIGHT JOIN
FULL OUTER JOIN → FULL JOIN

最初は混乱しないようにフルネームで覚えて、慣れてきたら省略形を使ってみてください。

おわりに

結合をマスターすると、バラバラのデータから自由自在にレポートが作れるようになります。
まずは一番基本の INNER JOINLEFT JOIN の違いを完璧にマスターしていきたいです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?