--------------------------------------------------
◆JOINの種類
--------------------------------------------------
・INNER JOIN
⇒内部結合。
・LEFT JOIN(LEFT OUTER JOIN)
⇒JOIN句の左側のテーブルを主テーブルとしてJOIN
・RIGHT JOIN(RIGHT OUTER JOIN)
⇒JOIN句の右側のテーブルを主テーブルとしてJOIN
・FULL JOIN(FULL OUTER JOIN)
⇒JOIN句の双方のテーブルのレコードを残してJOIN
--------------------------------------------------
◆例
--------------------------------------------------
■データ
tablea
id name
1 tanaka
2 yoshida
tableb
id weight
1 60
3 80
■INNER JOIN
SELECT a.id,a.name,b.weight FROM a
INNER JOIN b ON a.id = b.id
[結果]
id name weight
1 tanaka 60
⇒両tableにあるid=1のレコードのみ取得
■LEFT JOIN(LEFT OUTER JOIN)
SELECT a.id,a.name,b.weight FROM a
LEFT JOIN b ON a.id = b.id
[結果]
id name weight
1 tanaka 60
2 yoshida NULL
⇒tableaにあるidのレコードのみ取得
■RIGHT JOIN(RIGHT OUTER JOIN)
SELECT a.id,a.name,b.weight FROM a
RIGHT JOIN b ON a.id = b.id
[結果]
id name weight
1 tanaka 60
3 NULL 80
⇒tablebにあるidのレコードのみ取得
■FULL JOIN(FULL OUTER JOIN)
SELECT a.id,a.name,b.weight FROM a
FULL JOIN b ON a.id = b.id
[結果]
id name weight
1 tanaka 60
2 yoshida NULL
3 NULL 80
⇒tablea、tablebいずれかにあるidのレコードを取得
--------------------------------------------------
◆JOINが遅い場合の小技
--------------------------------------------------
JOINのSQLに時間を要する場合、HASH JOINと明記することで劇的に改善する場合がある。
例)LEFT OUTER JOIN ⇒ LEFT OUTER HASH JOIN
※行数の多いテーブルに対しネステッドループ結合を行う場合に時間がかかるケースがある。
この場合はハッシュ結合を明記することで改善する。