JOINについてお勉強
SQLのJOINについてメモ。間違いもきっとあります。あしからず。
引用は全てこちらより
SELECT構文:JOINを使ってテーブルを結合する | Smart -Web Magazine
まずJOINとは
JOINは複数のテーブルを連結させるために用意されたキーワードです。単純にテーブルを連結させる以外にも、LEFT JOIN ONやUSINGなどの便利なキーワードがある
JOIN
(内部結合)
普通に結合する
SELECT purchase.id_c, id_p, fullname FROM customer JOIN purchase;
JOINにはオプションの構文がある
これから紹介するオプションで重要なのは、LEFT JOIN ON、USING、NATURAL LEFT JOIN までです。STRIGHT JOIN を使う機会はほとんどありませんし、RIGHT JOIN、INNER JOIN は余分です。
まとめると
- 「LEFT JOIN」、「USING」、「NATURAL LEFT JOIN」の3つを抑える
- STRIGHT JOIN を使う機会はほとんどありません
- 「RIGHT JOIN」、「INNER JOIN」は、とりあえず無視
LEFT JOIN
外部結合
JOIN(内部結合)だと、
条件にマッチしなかったやつは全く取得されないので
片方のテーブルに指定条件のレコードがなくてもNULLとして、とりあえず表示はする
ということが出来る
USING
USINGとは
USING句は、ON句の略記法で、結合する条件が同じ名前のフィールド名であれば、USINGで結合条件を指定することができます。USINGの引数に指定したフィールド名で、テーブル間のリレーションを作成します。
つまるところ
簡単なやつはONで条件指定をするけど、長くなることがあるので
USING句を使うとそれをスマートに書くことが出来るようだ
# USING を使った構文
SELECT * FROM A LEFT JOIN B USING (F1)# ON 条件式を使った構文
SELECT * FROM A LEFT JOIN B ON A.F1=B.F1
条件を複数指定したい場合はカンマで区切る
# USING を使った構文
SELECT * FROM A LEFT JOIN B USING (F1, F2, F3)# ON 条件式を使った構文
SELECT * FROM A LEFT JOIN B ON A.F1=B.F1 AND A.F2=B.F2 AND A.F3=B.F3,...
NATURAL LEFT JOIN
NATURAL(自然結合)とは
同じフィールド名を持つ2つのテーブルの NATURAL [LEFT] JOINは、 USINGを伴ったINNER JOINやLEFT JOINと同じです。
つまり
LEFT JOINとかにNATURALをつけるとUSINGを使ったのと同じことが出来るということかな
こんな風にかく
SELECT id_p, fullname FROM customer
NATURAL LEFT JOIN purchase;
この場合は
customerテーブルとpurchaseテーブルを両方のテーブルに存在する「id_cフィールド」を条件に結合されるってことかな
STRAIGHT JOIN
STRAIGHT JOINとは
STRAIGHT JOIN は、常に左側のテーブルを先に読むことを除けば、JOIN と同じです。これは、不当な順序でテーブルを出力するようなまれな事態に有効ですが、ほとんどの場合は必要ありません。
んー。例えば
customerテーブルを先に見て、それに紐づくpurchaseテーブルの情報をみたい!
と明確に示したい時に使うのかな。
そうしないと、
purchaseテーブルをみて、それに紐づくcustomerテーブルを見るって言う風にmysqlが勝手にやっちゃうからと
ただ、これSTRAIGHTはちゃんと使わないとかえって重くなる。
ちゃんとしたインデックス貼ってとか
MYSQLがJOINをどういう風にやってるかの流れを追った上で使うやつで・・・
ってことかな
via
MySQL のJOIN に関するメモ - Slow Dance
INNER JOIN
INNER JOINとカンマ( , )は、同義語で、通常のJOINの別名です。
要はJOINと同じ機能だけど、内部結合ですよ!ってのをわかりやすく示せそう。
OUTER JOIN
これも
LEFT JOINって書くと外部結合てわかりにくいから
LEFT OUTER JOIN って書くことも出来るよってことかな。