7

CROSS APPLYは JOIN のようなものです。また、EXISTS でも JOIN を実行できると思います(相関サブクエリ)

混乱しています。CROSS APPLY と EXISTS の使用の違いは何ですか?

EXISTS に対して CROSS APPLY を実行する必要があるのはいつですか?

4

2 に答える 2

11

CROSS APPLY は単なる JOIN ではありません。JOIN は、2 つのデータ セット間で一致する (または一致しない) 行を見つけます。CROSS APPLY は、適用対象のすべての行に対してクエリを実行する方法です。これは、JOIN がどのように機能するかのようなフィルタリング メカニズムとして機能しますが、各行に何かを適用しているため、そのように考える必要があります。

サブクエリ内の EXISTS は、フィルタリングのまったく異なるメカニズムです。何かを見つけるとすぐに検索を短絡するため、迅速な識別方法です。通常、EXISTS を使用する場所は、フィルター条件にヒットする可能性が高い場合です。これにより、検索ができるだけ短くなります。ただし、EXISTS はすべての一致を見つけるわけではありません。最初の一致を見つけるだけで、検索を停止します。

したがって、これら 3 つの異なる方法で同じ結果を得ることができますが、定義どおりに使用すれば、通常は正しい結果が得られます。文字通り 2 つのデータ セットを JOIN する場合は、JOIN を使用します。データ セット内のすべての行に対してプロセス (多くの場合フィルター) を実行する場合は、CROSS APPLY を使用します。肯定的な一致の可能性が高いものに対して高速なフィルターが必要な場合は、EXISTS を使用します。

于 2012-03-12T11:39:57.140 に答える