人に聞けない痔の悩み、これでスッキリ >>

INNER JOINの有用性

内部結合時に「INNER JOIN」と記述する有用性を教えてください。

内部結合を行なう際は、一般的には
FROM句にテーブル名を列挙し
WHERE句にテーブル間結合条件を列挙する
という形式をとります。少なくとも私は。

これをあえて「INNER JOIN」を使用して記述する有用性が分かりません。

私がぱっと思いつくレベルであれば、
「WHERE句に記述される条件の種類には、抽出条件とテーブル間結合条件の
2種類の条件が混在している。混乱を避ける為これを分離する」
と、屁理屈をこねることも可能ですが、
FROM句にテーブルと「INNER JOIN」記述を混在させるほうが
よっぽど分かりにくいように感じます。

あとさらに強いて言えば、「LEFT JOIN」にしたり「INNER JOIN」にしたりを
頻繁に切り替える場合とか。そんなこともまずないと思いますが…。


なので、「INNER JOIN」を使用する有用性をまったく感じません。
あえて使用する意味はあるのでしょうか?

質問は
・内部結合時に「INNER JOIN」を使用する有用性があるのか?
・有用性があるのであればどのような場合か?
です。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

本質的な差異はありません。



パフォーマンスに差が出るという事も
常識的にはありえないと思います。
今のオプティマイザはそんなに質は悪くありません。

20年以上前のDBもしくは無名で信用性の無いDBをあえて
使うという状況でもない限り気にしなくていいと思います。
    • good
    • 0
この回答へのお礼

なるほど。特に差は無いのですね。
あとは趣味嗜好の差ですかね。
参考になりました。ありがとうございました。

お礼日時:2010/05/11 11:09

>わからないとまったく役に立たない情報になってしまいます。



そうじゃなくて、SQLのチューニングなんてトライアンドエラーだと
いうことでしょう。
方法が複数ある、どれが速いかわからないという情報をもっておけば
チューニングの際によりよい方法を模索できるのです。

それとJOIN系の処理にはUSINGが使えたり、サブクエリで結合する
ときに可読性がたかかったりする場合もあるので、スピード以外でも
JOINを使う意義はあると思います。

運用上たいてい主テーブルがあってそれに正規化されたテーブルを
くっつけていくことが多いでしょうから、感覚的(心情的)にも
どちらかといえばWHEREにテーブルを列記することの方がまれじゃ
ないですか?

この回答への補足

# サブクエリで結合するときに可読性がたかかったりする場合もある

この点はイメージできませんでした。
出来れば具体的な例を挙げていただきたいです。
よろしくお願いします。

補足日時:2010/02/08 14:43
    • good
    • 0
この回答へのお礼

確かにUSINGが使えるというのは、「INNER JOIN」ならではですね。
それから、あなたは特に理由がなければ「INNER JOIN」を使う
ということなのですよね。「INNER JOIN」を好んで使おうとする
人もいるということがわかり参考になりました。

ありがとうございました。

お礼日時:2010/02/08 14:41

>・有用性があるのであればどのような場合か?



「結果だけ」を見れば「同じ結果を返す」のであるから、好きな方を使えば良い。有効性、無効性の問題ではない。

だたし「どのデータベースエンジンを使うか」により、決定的で致命的な差異が発生する。

結果が同じでも「結果が抽出されるに至るまでのトランザクションの量」が、エンジンごとに違う。

データベースエンジンごとに、得手、不得手があるので
「WHERE句で結合を書くと総当り全件がトランザクションされてからWHERE句により絞り込みされるが、JOIN句で書くと結合を行った部分のみがトランザクションされてからWHERE句により絞り込みされるので、JOIN句で書いた方が圧倒的に早い」
と言うエンジンと
「JOIN結合は他のSQL構文と互換性を持たせるだけのオマケ的存在で動作が非常に遅く、総当り全件をトランザクションさせてからWHERE句で抽出した方が圧倒的に早い」
と言うエンジンがあったりする。

馬鹿の一つ覚え的に「WHERE句で出来るからINNER JOINなんか要らない」と思っていると「INNER JOINって書けば一瞬で結果が返って来るのに、わざわざ結果が出るのに5秒もかかるSQL文を書いている」なんて事が起きている事に気付けない。

結果が同じでも、そこに至るまでの過程が異なるのであるから「適材適所」を心がけるべし。

要は「WHEREで書いた方が動作が速いエンジンではWHEREで、INNER JOINで書いた方が動作が速いエンジンではINNER JOINで書くべし」と言う事。
    • good
    • 0
この回答へのお礼

パフォーマンスに影響をもたらすことがあるということですね。

参考になりました。
ありがとうございました。


しかし
・WHEREで書いた方が動作が速いエンジン
・INNER JOINで書いた方が動作が速いエンジン
がわからないとまったく役に立たない情報になってしまいます。


もしご存知であれば、知っている範囲で結構ですので
・WHEREで書いた方が動作が速いエンジン
・INNER JOINで書いた方が動作が速いエンジン
をそれぞれ教えてください。

よろしくお願いします。

お礼日時:2010/02/04 16:45

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード


人気Q&Aランキング