3

ON対を使用して結合をフィルタリングすることを理解していWHEREますか?


WHERE

...結合されたテーブルの結果をフィルタリングします。つまり、フィルターが他のテーブルのフィールドにある場合でも、フィルターで除外されるため、目的のテーブルのすべてのレコードが表示されないLEFT JOINか、表示されません。RIGHT JOINWHERE

ON

...結合されるテーブルのフィルターとして使用できます。ON以前は、2つのテーブルを結合するときにフィールドを比較するためだけに使用されると思っていましたが、結合WHEREされる特定のテーブルの分離のように機能することもできます。


2つのテーブルのみを結合する場合、これは実際には重要ではありませんが、3つ以上のテーブル間で非常に大きな結合を行う場合は、違いを理解することが重要であることに気付きました。

4

1 に答える 1

3

@Gratzyが提供するリンクは役に立ちます

ON句とWHERE句の条件の違いは、確かに灰色です。

内部結合の場合、それらは同等です。OUTER JOINSの場合、ON条件が評価された後にWHERE句が概念的に適用されるという理解は正しいです。

しかし、多くの場合、違いは機能よりも意図にあります。多くの場合、ON条件とWHERE句の間には意味上の違いがあります。

たとえば、古いバージョンのSQL Serverは、WHERE句の条件を使用してON構文を実際に実装し、OR構文を使用してLEFT*=または=*RIGHT結合を暗黙指定しました(これにより、場合によっては、LEFTおよびRIGHT JOINと同等の結果とは微妙に異なる結果になります)

一般に、私のアドバイスは、常にON句の適切なキーフィールドを使用して、レコードが互いにどのように関連付けられるかのロジックに基づいてレコードを結合することです。WHERE句を使用して、この結果セットを段階的に制限するフィルタリング条件を適用します。

于 2012-05-09T13:49:45.720 に答える