2012-03-12 3 views
4

私は混乱していますCROSS APPLYとEXISTSを選択した場合は?

CROSS APPLYが.. JOINをただのようなもので、私が登録しようと思います(相関サブクエリ)も存在して達成することができ、読み、CROSSが適用され、EXISTS使用しての違いは何ですか?

私はCROSSために行く必要がありEXISTSに対して適用しますか? CROSSが適用

+1

はエキゾチックな操作です。あなたは、APPLYを使用することなく、多くの重要な仕事をやり遂げることができます。それについて学ぶことを忘れないようにして、それを念頭に置いてはいけませんが、APPLYを適用する機会は毎日ではありません。 Itzik Ben-GanによるTSQL Queryingのコピーを借りたり、オンラインでいくつかのページを読むことができれば、彼は "TOPとAPPLY"という章を持っています。そこにあるアプリケーションは、1)典型的なものと2)非常にエキサイティングなものです。 –

+0

はい、Itzik Ben-Ganの本の+10。それは自分のものでなければならない。 –

+0

@GrantFritchey:+10?!!通常、人々は+1を与える..:D;) – dotNETbeginner

答えて

6

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

サブクエリに存在するフィルタリングの完全に異なるメカニズムです。それは何かを見つけたときにすぐに検索を短絡させるので、迅速な識別の方法です。 EXISTSを一般的に使用したい場所は、フィルタ条件にヒットしそうなときに検索をできるだけ短くするときです。しかし、EXISTSはすべてのマッチを見つけるわけではありません。最初の一致を見つけて検索を停止します。あなたはこれらの3つの異なる方法から同じ結果に到着することができますが定義されているよう

ので、それらを使用して、あなたはusally右のだろう。文字通り2組のデータをジョインする場合は、JOINを使用します。データ・セット内のすべての行に対してプロセス(頻繁にフィルター)を実行する場合は、「CROSS APPLY」を使用します。可能性のある正の一致で高速フィルタを使用する場合は、EXISTSを使用します。私は「CROSSが適用さ」に言及したいと「OUTERが適用されます。」グラントのコメントのほかに

関連する問題