2011-10-18 16 views
5

私は遠くに見てきましたが、質問をする正しい方法を理解できないため、答えが見つからない可能性があります。したがって、ここにあります:これらの2つのクエリのいずれかを好む理由がありますか?JOINs対多数のテーブルから選択

SELECT * FROM table1, table2 WHERE table1.id = table2.id; 

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; 

質問は、私が最適化しようとしていますはるかに複雑クエリから茎が、私はそれらの2つのクエリは、問題の本質が含まれていると思うし、うまくいけば、この中で尋ねることでそれは他の人にとってより有用になるでしょう。前もって感謝します。

+0

最初のクエリでも機能しますか?もしそうであれば、私は静かに何らかの形で参加していると仮定しますが、どのタイプがわかりません。 – eykanal

+0

それは動作します、私は転記する前にそれをテストしました。 ;) – Sophivorus

答えて

4
SELECT * FROM table1, table2 WHERE table1.id = table2.id; 

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; 

同じ結果を返します。しかし、この場合、2番目の方を選ぶべきです。最初の形式は、Oracleが長い間第2の形式をサポートしていなかったので、依然として幅広く遭遇しています。 INNER JOINを述べ

しかし、INNER JOINON句を必要とするため、意図と力はあなたが条件を記述するために運びます。大規模なクエリの場合、クエリがはるかに読みやすくなり、結合する述部をスキップするのが難しくなります。

また、Iは、として最初の形式を読み取るする傾向があることに注意:二つのテーブルのデカルト積をとり、そしてのみSQLにSELECT * FROM table1 CROSS JOIN table2 WHERE table1.id = table2.id;として表される両方のテーブルに等しいIDを持つ行を保持します。

5

実際には2つのクエリは同じですが、2つの異なる方法で記述します。個人的には、後者の方がユーザーの読みやすさが少し向上すると思います。

+0

私は前者が非難されているとは言いませんが(http://blogs.technet.com/b/wardpond/archive/2008/09/13/deprecation-of-old-style-join-syntax- only-a-partial-thing.aspx)。 –

2

what I gather両者は同じです。一つはもう一方の文法的な砂糖です。

これは、明示的対暗黙的な結合表記法として知られています。

+0

「明示的」対「暗黙的」という言葉に対して+1。 – Benoit

2

これらは同じです。

基本形式で見られる違いの多くは、OracleやmySQLなどの異なるデータベース間の違いが多い場合があります。 MySQLは、それはあなたのためのマニュアル/ドキュメントをチェックするのが最善であるので同様にjoininner joinleft inner joinleft joinが伝統的実装にデータベースの実装から少し変化しているtable1 join table2 on table1.foreign_key = table2.id

を使用することになり、一方、伝統的にOracleでちょうどtable.foreign_id = table2.idを用いて行ったジョイン現在のデータベースの実装は、あなたが望むことをしていることを確認します。

最近では、ANSI標準で構文がより標準化されていますが、人々が頻繁に使用するものはそのルーツを示しています。
このよく書かれた記事 -
http://www.google.com/url?sa=t&source=web&cd=4&ved=0CD8QFjAD&url=http%3A%2F%2Fwww.kingtraining.com%2Fconfdownloads%2Fdownloads%2FOracle9iJoin_paper.pdf&ei=LOGdTpfiFOrV0QH4zpmECQ&usg=AFQjCNHjicW-tWmJfZcXwNi220LxjGvNhg&sig2=4tdM2lfgQ6AqiYudWWTirg

は、より多くの情報と歴史を与え、内側と外側の様々な種類が本当によく参加し説明しています。

関連する問題