ホームページ >データベース >mysql チュートリアル >OUTER と CROSS APPLY は SQL クエリの柔軟性とパフォーマンスをどのように強化できるでしょうか?

OUTER と CROSS APPLY は SQL クエリの柔軟性とパフォーマンスをどのように強化できるでしょうか?

DDD
DDDオリジナル
2025-01-10 07:13:41326ブラウズ

How Can OUTER and CROSS APPLY Enhance SQL Query Flexibility and Performance?

SQL での OUTER および CROSS APPLY の実践的な応用

OUTER と CROSS APPLY は、クエリの柔軟性とパフォーマンスを向上させることができる SQL の 2 つの非常に貴重な構造です。古典的な例は難解に見えるかもしれませんが、これらの構造はさまざまなシナリオで実際に応用できます。

1. 関連データを効率的に取得する

2 つのテーブルがあるとします。Contacts テーブルには連絡先の詳細が含まれ、CommunicationEntries テーブルには通信チャネル (電話、FAX、電子メール) が含まれます。連絡先情報および関連する通信の詳細を取得するには、次のように CROSS APPLY を使用できます:

<code class="language-sql">SELECT c.name, ce.communicationType, ce.channel
FROM Contacts c
CROSS APPLY (
    SELECT *
    FROM CommunicationEntries ce
    WHERE ce.contactId = c.contactId
) ce;</code>

2. テーブル値関数を使用する

テーブル値関数 (TVF) は、表形式のデータを動的に生成する方法を提供します。 CROSS APPLY を使用すると、外側のクエリの行ごとに TVF を呼び出すことができます。たとえば、実行中のクエリのクエリ プランを表示するには:

<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. データを効率的にアンワインドする

正規化されたテーブル構造では、データは列に格納されます。巻き戻すとこのデータが平坦化され、属性ごとに行が作成されます。 OUTER 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 までご連絡ください。