はじめに
前回の記事で「マスター」と「トランザクション」に分けたテーブル。
今回は、それらを結合する5つの方法についてまとめました。
「どのデータが残って、どのデータが消えるのか」を意識していきます。
1. 内部結合(INNER JOIN)
一番よく使われる結合です。 「両方のテーブルに共通して存在するデータ」 だけを取り出します。
- 例: 売上記録があり、かつ商品マスターにも登録されているデータのみ表示
- 結果: 商品登録がない売上や、一度も売れていない商品は表示されない
2. 左外部結合(LEFT OUTER JOIN)
「左側(FROM句)のテーブル」を主役にする結合です。
- 例: すべての売上記録(左)を表示し、商品情報(右)があればくっつける
- ポイント: マスターにない商品が売れた場合、商品名は
NULLになるが、売上記録自体は消えずに残る
3. 右外部結合(RIGHT OUTER JOIN)
「右側(JOIN句)のテーブル」を主役にする結合です。
- 例: すべての商品マスター(右)を表示し、売上記録(左)があればくっつける
- ポイント: 「一度も売れていない商品(りんご等)」もすべてリストアップしたい時に便利
- 備考: 実務では
LEFT JOINに書き換えることが多いため、見かける機会は少なめ
4. 全外部結合(FULL OUTER JOIN)
「左右どちらかに存在すればすべて出す」 という、欲張りな結合です。
- 例: 売上記録も商品マスターも、一致していようがいまいが全部出したいとき
- 注意: MySQLなど一部のDBでは直接サポートされていないため、
LEFT JOINとRIGHT JOINをUNIONでつなぐ工夫が必要な場合がある
5. 交差結合(CROSS JOIN)
ちょっと特殊な結合で、 「すべての組み合わせ(掛け合わせ)」 を作ります。
- イメージ: 「5種類の商品」 × 「3つの店舗」 = 「15通りの在庫表」
- 数学用語: 直積(デカルト積)と呼ばれる
| Aテーブル | Bテーブル |
|---|---|
| りんご | A店 |
| キャベツ | B店 |
これをCROSS JOINすると
- りんご × A店
- りんご × B店
- キャベツ × A店
- キャベツ × 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 JOIN と LEFT JOIN の違いを完璧にマスターしていきたいです!



