ホームページ >データベース >mysql チュートリアル >OUTER と CROSS APPLY は SQL クエリの柔軟性とパフォーマンスをどのように強化できるでしょうか?
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 サイトの他の関連記事を参照してください。