【じょいん】
JOIN(結合) とは?
最終更新:
💡 別々の表を、条件に合う行でつなごう
SQLで、二つのテーブルなどの行を条件に従って組み合わせ、結果を取得する操作。INNER JOINは条件に一致する組を返し、LEFT JOINは一致しない左側の行も残す。一つの行に複数の行が一致すると、結果も複数行になる。
📌 このページのポイント
- ONなどの条件で行同士を組み合わせ、結果の表を作る
- INNER JOINは一致する組、LEFT JOINは不一致の左の行も返す
- 右側に一致がないLEFT JOINの行は、右側の列がNULLになる
- 一致先が複数なら結果も複数行。結合後のWHEREにも注意する
表を分けたら、注文した人が分からなくならない?
ユーザーの表と注文の表を、ユーザーIDなどでつなげるよ。たとえばusers.id = orders.user_idという条件で、誰の注文かを調べられる。元の表を書き換えず、必要な情報を結果として取得するんだ。
INNER JOINとLEFT JOINはどう違う?
INNER JOINは条件に一致する行の組だけを返す。LEFT JOINはそれに加え、一致がない左側の行も残して右側の列をNULLにするよ。図では注文がないぺんぎんも、LEFT JOINなら結果に残るね。
ひよこが2回注文したら、1行にまとまる?
普通のJOINだけでは、注文ごとにひよこの行が出て2行になるよ。一致先が複数なら組も複数になるからね。合計を出したいなら集計を考える。丸の重なりを示すベン図だけでは、この行の増え方が分かりにくいんだ。
LEFT JOINなら、左の人は必ず最後まで残る?
結合の段階では残るけれど、その後のWHERE条件で消える場合があるよ。たとえば右側の注文額で絞ると、NULLになった未注文の人が外れることがある。条件をONに書く場合とWHEREに書く場合を区別しよう。
他の種類は何に使うの?
RIGHT JOINは右側の不一致行も残し、FULL JOINは両側の不一致行も残す。CROSS JOINは全組み合わせで、2行と3行なら6行になるよ。対応する構文は製品で確認し、遅い場合は結果の件数や実行計画も調べよう。
まとめ:ざっくりこれだけ覚えればOK!
「JOIN」って出てきたら「別々の表の行を、条件に従って組み合わせるSQLの操作」と思えばだいたいOK!
📖 おまけ:英語の意味
「JOIN」 = 結合する・つなげる
💬 SQLでは、条件に合う行の組を作って結果を取得する操作の名前だよ。