質問: inner joinの有用性 inner joinの有用性 内部結合時に「inner join」と記述する有用性を教えてください。 内部結合を行なう際は、一般的には from句にテーブル名を列挙し where句にテーブル間結合条件を列挙する という形式をとります。少なくとも私は。 これをあえて「inner join」を使用して記述する有用性が分かりません。 私がぱっと思いつくレベルであれば、 「where句に記述される条件の種類には、抽出条件とテーブル間結合条件の 2種類の条件が混在している。混乱を避ける為これを分離する」 と、屁理屈をこねることも可能ですが、 from句にテーブルと「inner join」記述を混在させるほうが よっぽど分かりにくいように感じます。 あとさらに強いて言えば、「left join」にしたり「inner join」にしたりを 頻繁に切り替える場合とか。そんなこともまずないと思いますが...。 なので、「inner join」を使用する有用性をまったく感じません。 あえて使用する意味はあるのでしょうか? 質問は ・内部結合時に「inner join」を使用する有用性があるのか? ・有用性があるのであればどのような場合か? です。よろしくお願いします。
回答: >・有用性があるのであればどのような場合か? 「結果だけ」を見れば「同じ結果を返す」のであるから、好きな方を使えば良い。有効性、無効性の問題ではない。 だたし「どのデータベースエンジンを使うか」により、決定的で致命的な差異が発生する。 結果が同じでも「結果が抽出されるに至るまでのトランザクションの量」が、エンジンごとに違う。 データベースエンジンごとに、得手、不得手があるので 「where句で結合を書くと総当り全件がトランザクションされてからwhere句により絞り込みされるが、join句で書くと結合を行った部分のみがトランザクションされてからwhere句により絞り込みされるので、join句で書いた方が圧倒的に早い」 と言うエンジンと 「join結合は他のsql構文と互換性を持たせるだけのオマケ的存在で動作が非常に遅く、総当り全件をトランザクションさせてからwhere句で抽出した方が圧倒的に早い」 と言うエンジンがあったりする。 馬鹿の一つ覚え的に「where句で出来るからinner joinなんか要らない」と思っていると「inner joinって書けば一瞬で結果が返って来るのに、わざわざ結果が出るのに5秒もかかるsql文を書いている」なんて事が起きている事に気付けない。 結果が同じでも、そこに至るまでの過程が異なるのであるから「適材適所」を心がけるべし。 要は「whereで書いた方が動作が速いエンジンではwhereで、inner joinで書いた方が動作が速いエンジンではinner joinで書くべし」と言う事。