- ベストアンサー
INNER JOINの有用性
- 内部結合時に「INNER JOIN」と記述する有用性を教えてください。
- 「INNER JOIN」を使用する有用性をまったく感じません。あえて使用する意味はあるのでしょうか?
- 質問は内部結合時に「INNER JOIN」を使用する有用性があるのか?有用性があるのであればどのような場合か?です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
本質的な差異はありません。 パフォーマンスに差が出るという事も 常識的にはありえないと思います。 今のオプティマイザはそんなに質は悪くありません。 20年以上前のDBもしくは無名で信用性の無いDBをあえて 使うという状況でもない限り気にしなくていいと思います。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>わからないとまったく役に立たない情報になってしまいます。 そうじゃなくて、SQLのチューニングなんてトライアンドエラーだと いうことでしょう。 方法が複数ある、どれが速いかわからないという情報をもっておけば チューニングの際によりよい方法を模索できるのです。 それとJOIN系の処理にはUSINGが使えたり、サブクエリで結合する ときに可読性がたかかったりする場合もあるので、スピード以外でも JOINを使う意義はあると思います。 運用上たいてい主テーブルがあってそれに正規化されたテーブルを くっつけていくことが多いでしょうから、感覚的(心情的)にも どちらかといえばWHEREにテーブルを列記することの方がまれじゃ ないですか?
お礼
確かにUSINGが使えるというのは、「INNER JOIN」ならではですね。 それから、あなたは特に理由がなければ「INNER JOIN」を使う ということなのですよね。「INNER JOIN」を好んで使おうとする 人もいるということがわかり参考になりました。 ありがとうございました。
補足
# サブクエリで結合するときに可読性がたかかったりする場合もある この点はイメージできませんでした。 出来れば具体的な例を挙げていただきたいです。 よろしくお願いします。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>・有用性があるのであればどのような場合か? 「結果だけ」を見れば「同じ結果を返す」のであるから、好きな方を使えば良い。有効性、無効性の問題ではない。 だたし「どのデータベースエンジンを使うか」により、決定的で致命的な差異が発生する。 結果が同じでも「結果が抽出されるに至るまでのトランザクションの量」が、エンジンごとに違う。 データベースエンジンごとに、得手、不得手があるので 「WHERE句で結合を書くと総当り全件がトランザクションされてからWHERE句により絞り込みされるが、JOIN句で書くと結合を行った部分のみがトランザクションされてからWHERE句により絞り込みされるので、JOIN句で書いた方が圧倒的に早い」 と言うエンジンと 「JOIN結合は他のSQL構文と互換性を持たせるだけのオマケ的存在で動作が非常に遅く、総当り全件をトランザクションさせてからWHERE句で抽出した方が圧倒的に早い」 と言うエンジンがあったりする。 馬鹿の一つ覚え的に「WHERE句で出来るからINNER JOINなんか要らない」と思っていると「INNER JOINって書けば一瞬で結果が返って来るのに、わざわざ結果が出るのに5秒もかかるSQL文を書いている」なんて事が起きている事に気付けない。 結果が同じでも、そこに至るまでの過程が異なるのであるから「適材適所」を心がけるべし。 要は「WHEREで書いた方が動作が速いエンジンではWHEREで、INNER JOINで書いた方が動作が速いエンジンではINNER JOINで書くべし」と言う事。
お礼
パフォーマンスに影響をもたらすことがあるということですね。 参考になりました。 ありがとうございました。 しかし ・WHEREで書いた方が動作が速いエンジン ・INNER JOINで書いた方が動作が速いエンジン がわからないとまったく役に立たない情報になってしまいます。 もしご存知であれば、知っている範囲で結構ですので ・WHEREで書いた方が動作が速いエンジン ・INNER JOINで書いた方が動作が速いエンジン をそれぞれ教えてください。 よろしくお願いします。
お礼
なるほど。特に差は無いのですね。 あとは趣味嗜好の差ですかね。 参考になりました。ありがとうございました。