【じょいん】

JOIN(結合) とは?

最終更新:
💡 別々の表を、条件に合う行でつなごう

SQLで、二つのテーブルなどの行を条件に従って組み合わせ、結果を取得する操作。INNER JOINは条件に一致する組を返し、LEFT JOINは一致しない左側の行も残す。一つの行に複数の行が一致すると、結果も複数行になる。

📌 このページのポイント
JOIN:同じIDの注文をつなぐユーザー(左)1 ひよこ2 ぺんぎん注文(右)ID 1 注文AID 1 注文B条件:ユーザーIDが一致INNER JOINひよこ 注文Aひよこ 注文BLEFT JOINひよこ 注文Aひよこ 注文Bぺんぎん NULL一致先が2件なら、結果も2行!
LEFT JOINは注文のないぺんぎんも残す。NULLは右側の列に一致する値がないことを表す。
ひよこ ひよこ
表を分けたら、注文した人が分からなくならない?
ペンギン先生 ペンギン先生
ユーザーの表と注文の表を、ユーザー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では、条件に合う行の組を作って結果を取得する操作の名前だよ。

参考資料

← 用語集にもどる