SQL での OUTER/CROSS APPLY の実践的な応用
OUTER および CROSS APPLY は、強化されたデータ操作機能を提供する強力な SQL 演算子です。 この記事では、実際の例を通じてその実際の使用法を明らかにします。
シナリオ 1: カテゴリごとの上位 N レコード
OUTER APPLY は、各グループ内の上位 N 行を取得する場合に非常に有益であることがわかります。 すべてのストアド プロシージャの上位 2 つのパラメータを見つけることを検討してください:
<code class="language-sql">SELECT pr.name, pa.name FROM sys.procedures pr OUTER APPLY ( SELECT TOP 2 * FROM sys.parameters pa WHERE pa.object_id = pr.object_id ORDER BY pr.name ) pa ORDER BY pr.name, pa.name;</code>
シナリオ 2: テーブル値関数の使用
CROSS APPLY は、プライマリ クエリの各行に対するテーブル値関数の実行を容易にします。例:
<code class="language-sql">SELECT * FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>
これにより、sys.dm_exec_query_plan
が sys.dm_exec_query_stats
のすべての行に効率的に適用されます。
シナリオ 3: 計算列の再利用
APPLY を使用すると、計算列の別名の再利用が可能になり、単一の式から複数の派生列が生成されます。
<code class="language-sql">SELECT number, doubled_number, doubled_number_plus_one FROM master..spt_values CROSS APPLY ( SELECT 2 * CAST(number AS BIGINT) ) CA1(doubled_number) CROSS APPLY ( SELECT doubled_number + 1 ) CA2(doubled_number_plus_one);</code>
シナリオ 4: 複数の列グループのピボット解除
1NF に違反しているデータセットの場合、APPLY は複数の列グループを同時に効率的にアンピボットします。
<code class="language-sql">SELECT Id, Foo, Bar, GrpName FROM T CROSS APPLY ( VALUES('1', Foo1, Bar1), ('2', Foo2, Bar2), ('3', Foo3, Bar3) ) V(GrpName, Foo, Bar);</code>
OUTER/CROSS APPLY をマスターすると、SQL データ操作スキルが大幅に強化され、複雑なデータの課題に対する効率的なソリューションが可能になります。
以上がOUTER/CROSS APPLY は実際の SQL データ操作の課題をどのように解決できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。