🍛 まず、そもそも「結合」って何?
イメージで言うと:
「別々の表(テーブル)をつなげて、ひとつの表として扱う」ことです。
たとえば、社員と部署が別々のテーブルにあるとき、
-
社員テーブル
← 名前、部署番号、給料など -
部署テーブル
← 部署番号、部署名など
この2つを「部署番号」でつなげて1枚の表にするのがJOINです!
✅ ① 自然結合(NATURAL JOIN)とは?
共通の列名があると、それを自動で使って結合してくれる便利機能!
-
両方のテーブルに「部署番号」という列があれば、それを使って結合してくれる。
-
JOIN条件を省略できるので楽ちん。
-
ただし、列名が違っていると使えない!
📌【ポイント】
-
共通の列名がないとエラーになる
-
複数あった場合は全部の列で結合される
✅ ② Using句(JOIN ... USING)とは?
結合に使う列名が同じとき、それを明示的に書く方法!
-
部署番号
という列をキーにして結合するよ!って明示する。 -
ON
よりもシンプルでスッキリ。 -
結果に表示されるときは、
部署番号
は1回だけ出る(重複しない)。
📌【ポイント】
-
列名が同じじゃないと使えない →
USING (部署ID)
は両方に存在する必要あり! -
複数列も指定できる:
USING (部署番号, 拠点ID)
✅ ③ 外部結合(OUTER JOIN)とは?
片方のデータがなくても結果に出してくれるやさしいJOIN!
たとえば、「社員はいるけど、まだ部署が決まってない人」も結果に出したいとき。
-
LEFT
:左の表(社員)を必ず表示する -
RIGHT
:右の表(部署)を必ず表示 -
FULL
:両方とも表示(Oracleで使用可能)
📌【ポイント】
-
Oracleでは
OUTER
は省略可能:LEFT JOIN
でもOK -
NULLが返る列に注意(結合先にデータがないとNULLになる)
✅ ④ 非等価結合とは?
JOINといえば「=」ですが、これは
=`以外を使ってつなぐ結合。
たとえば「給料テーブル」に「給与ランク範囲」があって、社員の給料がどのランクか調べたいとき。
📌【ポイント】
-
BETWEENや<, >などの条件もJOINに使える
-
主キー/外部キー以外の関係でも結合可能
✅ ⑤ 自己結合(Self Join)とは?
同じテーブル同士をJOINする。つまり、テーブルを2回使う。
たとえば、社員の「上司」を調べたい場合。
-
別名(エイリアス)をつけるのがポイント
-
同じテーブル内の親子関係、上下関係を表すのに便利
📌【ポイント】
-
別名をつけないとどっちの列かわからなくなる
-
複雑な表現に見えるが中身は普通のJOIN
✅ ⑥ クロス結合(CROSS JOIN)とは?
全ての組み合わせを作るJOIN!
たとえば「全社員が全支店に出張できる可能性を調べる」みたいなとき。
-
社員が10人、支店が5つ → 10×5=50行のデータになる!
📌【ポイント】
-
結合条件がないので完全なかけ算
-
実務ではほぼ使わない(間違って書くと暴走する💦)