【じょいん】
JOIN(結合) とは?
💡 複数のテーブルを「つなげて1つの表にする」SQL操作
📌 このページのポイント
- JOINは2つ以上のテーブルを共通のカラムで結びつけてデータを取得する
- INNER JOINは両方のテーブルに一致するデータだけを返す
- LEFT JOINは左側のテーブルのデータを全て残し、右側に一致がなければNULLになる
- RIGHT JOINやFULL OUTER JOINなど、用途に応じた結合方法がある
JOINって何のために使うの?
INNER JOINとLEFT JOINの違いがよくわからない…
INNER JOINは両方のテーブルにマッチするデータだけを返す。LEFT JOINは左のテーブルは全行残して、右にマッチするものがなければNULLで埋める。例えば「全ユーザーと、もしあれば注文データ」を取りたいならLEFT JOIN。注文がないユーザーも結果に含まれるよ。
JOINってたくさん使うと遅くならない?
CROSS JOINとかFULL OUTER JOINとか種類が多くて混乱する…
実務で使うのはほとんどINNER JOINとLEFT JOINの2つ。CROSS JOINは全組み合わせを出す直積で、テストデータ生成くらいにしか使わない。FULL OUTER JOINは両側の全データを残す結合で、MySQLではそもそもサポートされていない。ただ厄介なのはJOINの実行順序で、複数のJOINが連なると「どのテーブルから先に結合するか」でパフォーマンスが大きく変わる。オプティマイザが最適な順序を選ぶはずなんだけど、統計情報が古いと変な実行計画になることがあるんだ。
📖 おまけ:英語の意味
「JOIN」 = 結合する・つなげる
💬 英語の「join(加わる・結合する)」そのまま。テーブル同士を結合するイメージ