【あうたーじょいん】

OUTER JOIN とは?

💡 マッチしなくても仲間外れにしない!優しい結合
📌 このページのポイント
OUTER JOIN(外部結合)の3種類 LEFT JOIN L R 左テーブル全行保持 RIGHT JOIN L R 右テーブル全行保持 FULL OUTER JOIN L R 両テーブル全行保持 LEFT JOIN の結果例(最もよく使われる) 田中 | 売上: 100万円 (一致あり) 佐藤 | 売上: 50万円  (一致あり) 鈴木 | 売上: NULL   (一致なし→NULLで保持)
OUTER JOINのイメージ
ひよこ ひよこ

OUTER JOINってINNER JOINとどう違うの?

ペンギン先生 ペンギン先生

INNER JOINは両方のテーブルに一致するデータだけ返すけど、OUTER JOINは一致しないデータもNULLを埋めて結果に含めるんだよ。「全員参加」の結合ってイメージだね

ひよこ ひよこ

LEFT JOINとかRIGHT JOINとかあるけど、何が違うの?

ペンギン先生 ペンギン先生

LEFT JOINは左側のテーブルの全行を残す、RIGHT JOINは右側の全行を残す、FULL OUTER JOINは両方の全行を残すんだよ。実務ではLEFT JOINが9割以上使われるね

ひよこ ひよこ

どういうときに使うのかな?

ペンギン先生 ペンギン先生

たとえば「全社員の売上一覧」を作るとき、売上がゼロの社員も表示したいよね。社員テーブルをLEFT JOINで売上テーブルに結合すれば、売上がない社員もNULLとして一覧に残るんだ

ひよこ ひよこ

RIGHT JOINってあんまり使わないの?

ペンギン先生 ペンギン先生

RIGHT JOINテーブルの左右を入れ替えてLEFT JOINで書き直せるから、実質使わないんだ。FULL OUTER JOINMySQLでは直接サポートされてなくて、UNIONで代用する必要があるよ

ひよこ ひよこ

NULLが入るとき、注意することってある?

ペンギン先生 ペンギン先生

集計関数でCOUNTやSUMを使うとき、NULLの扱いに注意が必要だよ。COUNT(*)はNULL行も数えるけど、COUNT(列名)はNULLを除外する。OUTER JOINを使うときはNULLの挙動を常に意識しておくのがプロの習慣だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「OUTER JOIN」って出てきたら「一致しない行もNULLで残す優しい結合」と思えればだいたいOK!
📖 おまけ:英語の意味
「Outer Join」 = 外部結合
💬 outer(外側)は共通部分の外にあるデータも含めるという意味だよ。INNER JOINの反対だね
← 用語集にもどる