ホームページ  >  記事  >  データベース  >  SQL Server は、CROSS APPLY と OUTER APPLY を使用して接続クエリを実装します。

SQL Server は、CROSS APPLY と OUTER APPLY を使用して接続クエリを実装します。

WBOY
WBOY転載
2022-08-26 14:07:242147ブラウズ

この記事は、SQL サーバー に関する関連知識を提供します。主に、CROSS APPLY と OUTER APPLY を使用して接続クエリを実装する SQL Server の方法を紹介します。この記事では、サンプル コードを通じて詳しく紹介します。ぜひご覧ください。皆さんのお役に立てれば幸いです。

SQL Server は、CROSS APPLY と OUTER APPLY を使用して接続クエリを実装します。

推奨学習: 「SQL チュートリアル

概要

CROSS APPLY と OUTER APPLY でできること:
左側のテーブルの 1 つのレコードが右側のテーブルの複数のレコードに関連付けられている場合、右側のテーブルの 1 つ以上のレコードが左側のテーブルと一致するかどうかを制御する必要があります。

#Student (学生テーブル) と Score (スコア テーブル) の 2 つのテーブルがあり、データは次のとおりです:

1. CROSS APPLY

ROSS APPLY は「クロスアプリケーション」を意味します。クエリを実行する場合、最初に左側のテーブルがクエリされ、次に右側のテーブルの各レコードが左側のテーブルの現在のレコードと照合されます。照合が成功した場合は、左テーブルと右テーブルのレコードが 1 つのレコードにマージされて出力され、照合が失敗した場合は、左テーブルと右テーブルのレコードが破棄されます。 (INNER JOIN と同様)

各生徒の最後の 2 つのテストのスコアをクエリします。

SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1
CROSS APPLY
(
    SELECT TOP 2 * FROM Score AS T
    WHERE T1.StudentNo = T.StudentNo
    ORDER BY T.ExamDate DESC
) AS T2

結果:

##2. OUTER APPLY

OUTER APPLY は「外部アプリケーション」を意味し、CROSS APPLY の原則と一致します。ただし、マッチングが失敗すると、左側のテーブルと右側のテーブルも出力用に 1 つのレコードにマージされますが、右側のテーブルの出力フィールドは null になります。 (LEFT OUTER JOIN と同様)

各学生の最後の 2 つのテストのスコアをクエリし、テストを受けなかった学生のスコアを null

SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1
OUTER APPLY
(
    SELECT TOP 2 * FROM Score AS T
    WHERE T1.StudentNo = T.StudentNo
    ORDER BY T.ExamDate DESC
) AS T2

で入力します。 結果:

3. アプリケーション シナリオ

1. テーブル値関数との組み合わせ:

次のようなテーブルがあります:

これは、フィールド num が 1 つだけある非常に単純なテーブルです。このフィールドの int 数値を 2 進数の 8 進数と 16 進数の値に変換したいと考えています。基数変換用の既製のテーブル値関数があります。 。

SELECT * FROM #T a CROSS APPLY [dbo].[F_TConversion](a.num)

要約すると、クエリ結果セットでテーブル値関数を使用してフィールドの値を処理する必要がある場合は、CROSS APPLY~

## を使用してください。 # 2. 最上位のサブクエリの使用法:

次のような、名前、科目、スコアの 3 つのフィールドを持つ学生テーブルがあります:

I want中国語の 1 位、数学の上位 2 位、英語の上位 3 位の名前、科目、およびスコアは、次のようにクロス適用を使用して達成できます:

SELECT b.* FROM (
    select Subject='Chiness',num=1 union all
    select 'Math',2 union all
    select 'English',3) a 
cross apply 
    (select top(a.num) * from Students where Subject=a.Subject ) b

推奨学習: 「

SQL チュートリアル

>>

以上がSQL Server は、CROSS APPLY と OUTER APPLY を使用して接続クエリを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。