この記事は、SQL サーバー に関する関連知識を提供します。主に、CROSS APPLY と OUTER APPLY を使用して接続クエリを実装する SQL Server の方法を紹介します。この記事では、サンプル コードを通じて詳しく紹介します。ぜひご覧ください。皆さんのお役に立てれば幸いです。
推奨学習: 「SQL チュートリアル 」
CROSS APPLY と OUTER APPLY でできること:
左側のテーブルの 1 つのレコードが右側のテーブルの複数のレコードに関連付けられている場合、右側のテーブルの 1 つ以上のレコードが左側のテーブルと一致するかどうかを制御する必要があります。
#Student (学生テーブル) と Score (スコア テーブル) の 2 つのテーブルがあり、データは次のとおりです:
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 APPLYOUTER APPLY は「外部アプリケーション」を意味し、CROSS APPLY の原則と一致します。ただし、マッチングが失敗すると、左側のテーブルと右側のテーブルも出力用に 1 つのレコードにマージされますが、右側のテーブルの出力フィールドは null になります。 (LEFT OUTER JOIN と同様) 各学生の最後の 2 つのテストのスコアをクエリし、テストを受けなかった学生のスコアを nullSELECT 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. 最上位のサブクエリの使用法:
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 サイトの他の関連記事を参照してください。