ホームページ >データベース >mysql チュートリアル >OUTER および CROSS APPLY は実際のアプリケーションで SQL クエリをどのように強化できるのでしょうか?

OUTER および CROSS APPLY は実際のアプリケーションで SQL クエリをどのように強化できるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-10 07:47:41864ブラウズ

How Can OUTER and CROSS APPLY Enhance SQL Queries in Real-World Applications?

SQL クエリにおける OUTER および CROSS APPLY の実践的な応用

OUTER および CROSS APPLY は、現実世界の多様なアプリケーションにおける SQL クエリの効率と可読性を大幅に向上させます。 以下にいくつかの具体的な例を示します:

1. カテゴリごとの上位 N レコード:

APPLY を使用すると、各グループの上位 N 行を抽出するときに、ネストされたクエリよりもパフォーマンスが向上します。 次の例を考えてみましょう:

<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>

3. エイリアスの効率的な再利用:

CROSS 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. 列のアンピボットの合理化:

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 クエリをどのように強化できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。