目次
はじめに
SQLの勉強をしていて、外部結合をどんな時に使うのかイメージできなかったので調べてみた。
内部結合と外部結合の違い
内部結合(INNER JOIN)
両方のテーブルに 一致するデータがある行だけ 出す。
「関係が成立しているものだけ見たい」
外部結合(OUTER JOIN)
一致しない行も 欠けたまま(NULL)で出す。
「関係が成立していないものも把握したい」
サンプルデータを用意
シナリオ
登録だけして注文をしたことがない人を確認したい。
usersテーブル
登録ユーザーが記録されたテーブル。
| user_id | name |
|---|---|
| 1 | Sato |
| 2 | Suzuki |
| 3 | Tanaka |
ordersテーブル
注文履歴が記録されたテーブル。
| order_id | user_id | amount |
|---|---|---|
| 101 | 1 | 3000 |
| 102 | 3 | 1500 |
外部結合でデータを抽出する
SQLで左外部結合
SELECT
u.user_id, u.name,
o.order_id, o.order_date, o.amount
FROM users u
LEFT OUTER JOIN orders o
ON u.user_id = o.user_id
ORDER BY u.user_id, o.order_id;
結果
Suzukiさんは ordersテーブル に対応するデータがないため、注文していないことが分かる。
| user_id | name | order_id | order_date | amount |
|---|---|---|---|---|
| 1 | Sato | 101 | 2025-12-06 | 3000 |
| 2 | Suzuki | NULL | NULL | NULL |
| 3 | Tanaka | 102 | 2025-12-07 | 1500 |
解説
左外部結合なので usersテーブル に ordersテーブル をくっつけている。
そのため、ordersテーブルに値がなくてもNULL表示される。
ordersテーブルの値がNULL = 注文をしたことがない人が分かる。

結論
外部結合は「ある/ない」を確認したいときに使える。
コメント