日頃、扱う事が多いので、見直して再度分かり易く説明できるように書いてみます。他人に説明するのが捗るしね。
MySQLの結合の基礎
ざっくり説明すると、2つ以上のテーブルの値を結合して値を出すということ。上の図でいうとユーザーテーブルのそれぞれカラムがあり、そこには別の仕事テーブルと紐付けしているという状態。で、実際に業務に使っていると色々な条件で抽出しなければならないことがある。
実際にそのJOINの種類を見てみる。
INNER JOIN (内部結合)
単純にカラムにあった値を出すというもの。
この場合は、
SELECT * FROM `users` INNER JOIN `works` ON `users`.`work_id` = `works`.`work_id`
SELECTの後は* と全指定なので、全て表示ですが、必要なカラムだけ指定すればそれだけ表示されます。
内部結合で人に教えるときに、そのカラムを指定を間違う点、
あとその後のONで指定しないとCROSS JOIN と同じで全て表示されるという点、
それとSELECTの後に表示させるカラム名明確に記載しないと(今回でいう*の部分)全部表示されるという事ですかね。
↓
SELECT `users` INNER JOIN `works` ON `users`.`work_id` = `works`.`work_id`
↓
テーブル名が長くてメンドクセーって場合は AS句で省略もできます。
SELECT name,work_name FROM `users` AS u INNER JOIN `works` AS w ON u.`work_id` = w.`work_id`
LEFT OUTER JOIN と RIGHT OUTER JOIN (外部結合)
INNER JOIN 内部結合では外部キーに指定でないのですが、外部結合はお構いなしに結合してきます。記述の仕方はINNER部分が違うだけですね。
SELECT id,name,work_name FROM `users` LEFT OUTER JOIN `works` ON `users`.`work_id` = `works`.`work_id`
図で表すとこんな感じです。
CROSS JOIN
私はあまり使わないのですが、クロス結合は全ての値を出す。デカルト積です。
実際にやってみます。
要は全て掛け合わせるということですね。
左の例ではCROSS JOINのみで、
その後のON指定はしていません。
ON や USING 指定すると
INNERJOINと同じ挙動になります。
使うか?のか?これ?
ブルートフォートの辞書作りには使うかもですね。
うん、たぶん。それ以外は使いみちが分からないです。