2012-05-09 9 views
1

ONWHEREを使用してフィルタリング結合を理解していますか?フィルタリングジョイン:WHERE対ON


WHERE

...彼らもWHEREフィルターかかわらず、除外されますので、意図したテーブルのすべてのレコードを表示しませんLEFT JOINまたはRIGHT JOINを意味し、結合されたテーブルの結果をフィルタリングします他のテーブルのフィールドにある可能性があります。

ON

...接合されるテーブルのフィルタとして使用することができます。私はONは、2つのテーブルを結合するときにフィールドを比較するためにのみ使用されていたと考えていましたが、結合されている特定のテーブルのために孤立したWHEREのように動作することもできます。あなたが唯一の2つのテーブルを結合しているときに、このの


どれも本当に重要ませんが、私は3+のテーブル間で結合し、非常に大きなを行う場合の違いを理解することが重要であることを認識するようになりました。

+0

「入」は結合条件のためのもので、「内なる結合」の結果のみをフィルタリングします – Lamak

+0

2つの違いは何ですか?現時点では、あなたは2つの質問をしているようです。 – Patrick

+1

この質問をチェックすると、これにいくつかの良い答えがあります。http://stackoverflow.com/questions/1401889/sql-filter-criteria-in-join-criteria-or-where-clause-which-is-more-efficient – Gratzy

答えて

3

link @Gratzy providedはON句とWHERE句内の条件との間の違いは確かに灰色一つである人

あります。

INNER JOINSの場合は同等です。 OUTER JOINSについては、ON条件が評価された後、WHERE句が概念的に適用されていることを正しく理解しています。

しかし、多くの場合、その違いは機能よりも意図的ではありません。 ON条件とWHERE節の間には意味の違いがあることがよくあります。例えば

、SQL Serverの旧バージョンのは本当に句は、左または右を意味する*=または=*構文を使用することは奇妙に微妙に異なる結果につながった(参加しLEFTを形成し、RIGHT WHEREで条件を使用してON構文を実装しましたJOINの等価物)

私の助言は、常に、ON句の適切なキーフィールドを使用して、レコード同士の関連付けのロジックに基づいてレコードを結合することです。この結果セットを徐々に制限するフィルタ条件を適用するには、WHERE句を使用します。

関連する問題