※過去ブログの転記
今まで曖昧にしていた結合についてちゃんとまとめておく
内部結合INNER JOIN
/ 外部結合LEFT(RIGHT) OUTER JOIN
記述例
SELECT * FROM table1 LEFT JOIN table2 ON table1.field1 = table2.field2
要点
LEFT JOIN
,RIGHT JOIN
はLEFT OUTER JOIN
,RIGHT OUTER JOIN
の省略形- JOINの条件は複数指定できる
- 内部結合
INNER JOIN
は結合先のテーブルに指定した条件と一致するレコードがなければ取得しない - 外部結合
OUTER JOIN
は一致しないレコードも全て取得する
LEFTとRIGHTの違い
- LEFTは結合先のテーブルを左に結合する
- RIGHTは右に結合
FROM table1 LEFT JOIN table2 ON...
table1の左にtable2を外部結合するのでtable1のデータは全て取得する
FROM table1 RIGHT JOIN table2 ON...
table1の右にtable2を外部結合するのでtable2のデータは全て取得する
下記クエリはどちらもtable1の左にtable2を結合する
FROM table1 LEFT JOIN table2 ON...
FROM table2 RIGHT JOIN table1 ON...
補足
SELECT * FROM table1 LEFT JOIN table2 ON table1.field1 = table2.field2
↓ 下と同じだけどJOINした方が処理が速かった
SELECT * FROM table1,table2 WHERE table1.field1 = table2.field2
クロス結合CROSS JOIN
記述例
SELECT * FROM table1 CROSS JOIN table2
要点
- 2つ以上のテーブルで条件が一致したものを取得する
(条件を指定した場合はINNER JOINと同じ?)
補足
条件指定なし
SELECT * FROM table1 CROSS JOIN table2
↓ 同じ
SELECT * FROM table1,table2
条件指定あり
SELECT * FROM table1 CROSS JOIN table2 ON table1.field1 = table2.field2
↓ 同じ
SELECT * FROM table1 INNER JOIN table2 ON table1.field1 = table2.field2
和結合UNION (DISTINCT)
/ UNION ALL
記述例
SELECT * FROM table1 UNION /*UNION ALL*/ SELECT * FROM table2
要点
- 2つ以上のSELECTの結合
- デフォルトではUNION DISTINCT が実行される
- UNIONで結合するテーブルは同じ列数じゃないといけない
CROSS JOIN
とUNION
は正直具体的な恩恵が何かがわからないのであまり深く調べていない...
今まで使ったことがないし使いどころもいまいちわからない