オペレーターAPPLY
は私が使った経験のあるオペレーターではなく、特定の可能性を逃しているのではないかと心配しています。
アレクサンダークズネツォフによるこの記事は良い例を示しています
アレクサンダーの例では、彼はAPPLY
関数からの戻りに参加するために使用しています- APPLY
、CROSS
またはOUTER
私が最初に使用する必要がある他の状況はありますか?
オペレーターAPPLY
は私が使った経験のあるオペレーターではなく、特定の可能性を逃しているのではないかと心配しています。
アレクサンダークズネツォフによるこの記事は良い例を示しています
アレクサンダーの例では、彼はAPPLY
関数からの戻りに参加するために使用しています- APPLY
、CROSS
またはOUTER
私が最初に使用する必要がある他の状況はありますか?
APPLY
任意の結果セットに参加できます。TOP 1
いくつかの順序で行を返すことが特に便利だと思います。
select *
from T
cross apply (
select top 1 * from T2 order by DateTime desc
) x
APPLY
参加できることすべてを行うことができます。ただし、結合ヒントは使用できません。
基本的に、結合で十分な場合は結合を使用します。使用するのが少し面倒なので、もっと必要な場合はapplyを使用してください。
APPLYは行ごとの演算子でAPPLY
あり、前のテーブルの各行を関数またはサブクエリのいずれかにすることができます。したがって、次のような状況で非常に役立ちます。
はい、JOINに置き換えることはできますが、SQL ServerにセットベースのJOINではなく行ごとの演算子を使用するように強制しているため、通常のJOINが機能する場合はひどく実行されます。
CROSSAPPLYとOUTERAPPLYの違いは、INNERJOINとOUTERJOINの違いと同じです。基本的に、CROSS APPLYは、それが適用される関数/サブクエリが0レコードを返す場合、ソースレコードを削除します。OUTER APPLYは、ソースレコードを保持します。
続きを読む:Apply(msdn)の使用
基本的に結合使用して2つの結果セットを結合しますが、CROSS APPLYはループのように動作し、外部テーブルの結果を取得してから、すべての行をパラメーターとしてドライブテーブルまたはテーブル値関数に渡して結果セットを生成します。適用には、クロス適用と外部適用の2つの形式があります。CROSS APPLY tは、ドライブテーブルまたはテーブル値関数と一致する行のみを返し、OUTER APPLYは、外部テーブルのすべてのレコードを返し、ドライブテーブルの一致は、遅いクエリが結合するため、applyの使用を避けようとします。