SQL学びその8 テーブルの結合♪

Photo by Linda Eller-Shein on Pexels.com

ついにここに来たっ!  Join 長かったよ〜まってたよ〜

キーとなる列をつかって複数のテーブルを結合したテーブルをつくることだね。

このテーブル結合の役割を知るために作ったチャートがER図でFKと書いてある列がキーとして使わる列。

さらに主キーというものがあり、以下の条件を満たす必要がある
1)null がないこと
2)重複がないこと
ER図の上の方に書いて、罫線(横線)で区切って主キーは区別する。

結合のタイプ

結合タイプは5つある

INNER JOIN 左右両方のテーブルに外部キー=主キーが存在する(つまり両方に存在する)レコードだけJOINする。左右どちらかにしかキーがないものは除外される
LEFT OUTER JOIN 左の全レコードを反映する
RIGHT OUTER JOIN 右の全レコードを反映する
FULL OUTER JOIN どっちにあってもなくても全レコード反映する
CROSS JOIN(は今回割愛)
実際には圧倒的にLEFT OUTER JOINをつかうけど。

SELECT 取得する列
FROM テーブルA AS Aの別名
INNER|LEFT|RIGHT|FULL|CROSS JOIN テーブルB AS Bの別名
USING  (外部キーと主キーが同じ列名である場合)| ON Aの外部キー= Bの主キー  AND 絞り込み条件 列名=’条件’とか。USINGはカッコ()がいるよ
ORDER BY 並べる列 ASCとかDESCとか

ディフォルトのJOINはINNER JOIN LEFTじゃないのね
INNER JOINのINNERはだから省略可能
OUTERは省略可能 LEFT JOINでも動くということね

結合をするときは、どのテーブルの列かSELECTでも明示する必要があるため、
テーブルA AS Aの別名やテーブルB AS Bの別名 を指定しておくとその名称で指定できる

条件で絞ると、その情報だけ入って、LEFT OUTER JOINだと、それ以外は消えずにNULLで残るよ

右側のテーブルが主キーとしての要件を満たしていない場合、SQLが正しいと、そのまま主キーが重複してると、その分重複されてカウントされてしまう。

なお、3つ以上のテーブルもJOINできる。

SELECT 取得する列
FROM テーブルA AS Aの別名
INNER|LEFT|RIGHT|FULL|CROSS JOIN テーブルB AS Bの別名
USING  (外部キーと主キーが同じ列名である場合)| ON Aの外部キー= Bの主キー  AND 絞り込み条件
INNER|LEFT|RIGHT|FULL|CROSS JOIN テーブルB AS Bの別名
USING  (外部キーと主キーが同じ列名である場合)| ON Aの外部キー= Bの主キー  AND 絞り込み条件
というふうにつなげれば行ける。 

Toshiaki Ejiri: Born in Fukushima, working as web analytics consultant since 2000.