SQL Server の CASE ステートメントと入れ子になったケース: T-SQL の例
現実の事件の概要!
繰り返しになりますが、現実の生活では、さまざまな条件の結果に応じて、さまざまなアクションを実行します。
さらに詳しく説明するには、以下の例を考えてみましょう。
- 航空券が 100 ドル未満であれば、ロサンゼルスに行きます。
- 航空券が 100 ドルから 200 ドルの間であれば、ニューヨークに行きます
- 航空券が200ドルから400ドルの間であれば、ヨーロッパに行きます
- それ以外の場合は、近くの観光スポットを訪れたいと思います。
上記の例とは別に、以下の条件とアクションを分類して考えてみましょう。
| 条件 – フライトチケット | 実行されたアクション、条件が次の場合のみ TRUE |
| Less $ 100より | ロサンゼルスを訪問 |
| 間$ 100へ$ 200 | ニューヨークを訪問 |
| 間$ 200へ$ 400 | ヨーロッパを訪問 |
| 上記の条件がどれも満たされない | 近くの観光スポット |
上の例では、さまざまな条件の結果が個別のアクションを制御していることがわかります。 例えば、訪問者は航空券が100ドルから200ドルの間であるという条件でのみニューヨークを訪問する行為を行うことになります。
同様に、MS SQL CASE ステートメントは、さまざまな条件の結果に基づいてさまざまな T-SQL ステートメントを実行するアクションを実行する機能も提供します。
SQL Server の CASE ステートメントとは何ですか?
SQL Server の CASE ステートメント IF…ELSE文の拡張です。 最大 XNUMX つの条件のみが許可される IF…ELSE とは異なり、CASE ではユーザーが複数の条件を適用して、MS SQL のさまざまなアクションのセットを実行できます。 ユーザーが定義した条件に関連付けられた対応する値を返します。
次のセクションでは、SQL で Case を使用する方法とその概念について学習します。
In MS SQL, CASEにはXNUMX種類あります。
- シンプルなケース
- 検索されたケース
シンプルなケース
シンプルケースの構文
CASE <Case_Expression>
WHEN Value_1 THEN Statement_1
WHEN Value_2 THEN Statement_2
.
.
WHEN Value_N THEN Statement_N
[ELSE Statement_Else]
END AS [ALIAS_NAME]
ここでは、
- パラメータ ケース式 最終的に比較される式を示します 値_1、値_2、...
- パラメータ ステートメント_1、ステートメント_2… Case_Expression の場合に実行されるステートメントを示します。 = 値_1、ケース_式 = Value_2、…など。
- 一言で言えば、 条件 Case_Expression かどうかです。 = Value_N および ACTION は、Statement_N の実行です。 上記の結果は TRUE です.
- ALIAS_NAME はオプションで、SQL Server CASE ステートメントの結果に指定されるエイリアス名です。 SQL サーバーの select 句で Case を使用するときに主に使用されます。
単純なケースのルール
- Simple Case では、Value_1 から Value_N までの Case_Expression の等価性チェックのみが可能です。
- Case_Expression と Value は、最初の値 (Value_1) から順に比較されます。 以下は実行アプローチです。
- Case_Expression が Value_1 と等しい場合、それ以降の WHEN…THEN ステートメントはスキップされ、CASE の実行は直ちに終了します。
- Case_Expression が Value_1 と一致しない場合は、Case_Expression が Value_2 と比較されて同等かどうかが確認されます。 Case_Expression と Value を比較するこのプロセスは、Case_Expression が Value_1、Value_2、... のセットから一致する同等の値を見つけるまで継続されます。
- 一致するものがない場合、制御は ELSE ステートメントに移り、Statement_Else が実行されます。
- ELSE はオプションです。
- ELSE が存在せず、Case_Expression がどの値とも一致しない場合、 Nullが表示されます。
以下の図は、Simple Case の実行フローを示しています。

例
仮定: 次のようなテーブルがあると仮定します。 「グル99」 以下のように 2 列 4 行になります。
我々は使用するだろう 「グル99」 さらなる例の表
クエリ 1: NO ELSE オプションを使用した単純なケース
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
結果: 以下の図は、NO ELSE を指定した SIMPLE CASE の実行フローを説明しています。
クエリ 2: ELSE オプションを使用した単純なケース。
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
結果: 以下の図は、ELSE を使用した SIMPLE CASE の実行フローを説明しています。
検索されたケース
検索されたケースの構文
CASE
WHEN <Boolean_Expression_1> THEN Statement_1
WHEN <Boolean_Expression_2> THEN Statement_2
.
.
WHEN <Boolean_Expression_N> THEN Statement_N
[ELSE Statement_Else]
END AS [ALIAS_NAME]
ここでは、
- パラメータ Boolean_Expression_1, … は、TRUE または FALSE として評価される式を示します。
- パラメータ Statement_1、Statement_2… は、対応する Boolean_Expression_1、Boolean_Expression_2 の結果が TRUE の場合に実行されるステートメントを示します。
- 簡単に言うと、Condition は Boolean_Expression_1,… で、ACTION は上記の boolean_Expression_1 が TRUE の場合の Statement_N の実行です。
- ALIAS_NAME はオプションで、CASE ステートメントの結果に指定される別名です。 主に、select 句で CASE を使用するときに使用されます。
検索されたケースのルール
- 単純なケースとは異なり、Searched Case は等価性チェックのみに制限されず、ブール式も可能です。
- ブール式は、最初のブール式 (Boolean_expression_1) から順に評価されます。 以下は実行アプローチです。
- Boolean_expression_1 が TRUE の場合、それ以降の WHEN…THEN ステートメントはスキップされ、CASE の実行は直ちに終了します。
- Boolean_expression_1 が FALSE の場合、Boolean_expression_2 は TRUE 条件として評価されます。 Boolean_expression を評価するこのプロセスは、いずれかの Boolean_expression が TRUE を返すまで続行されます。
- 一致するものがない場合、制御は ELSE ステートメントに移り、Statement_Else が実行されます。
- Simple Case と同様に、検索ケースでも ELSE はオプションです。
- ELSE が存在せず、Boolean_expression のいずれも TRUE を返さない場合は、Null が表示されます。
以下の図 の実行フローを示します。 検索されたケース.
例
クエリ 1: NO ELSE オプションを使用した SEARCHED CASE
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
結果: 下図 実行フローを説明します 検索されたケース 他にはありません。
クエリ 2: 検索されたケース ELSE オプションを選択します。
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
結果: 下図 実行フローを説明します of 検索された事件 それ以外。
実行アプローチの違い: SIMPLE と SEARCH CASE。
見てみましょう シンプルなケース 以下の例:
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
ここでは、 'チュートリアル名' SQLのCASE式の一部です。 それから 'チュートリアル名' それぞれの値を比較します WHEN 値、 つまり、「SQL」…「Tutorial_name」が WHEN 値と一致するまで。
それどころか、 ケースの検索 例にはありません CASE式:
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
ここで、それぞれ WHEN ステートメント 持ってその 条件付きブール式。 各 ブール式 つまり、Tutorial_name = 'SQL',… が評価されます。 真/偽 まで 最初のブール値 と評価される式 TRUE.
単純なケースと検索されたケースの違い
| シンプルなケース | 検索されたケース |
|---|---|
| CASE キーワードの直後、および WHEN ステートメントの前に CASE_Expression が続きます。
例えば: |
Case キーワードの後に WHEN ステートメントが続きますが、CASE と WHEN の間に式はありません。
例えば: |
| 単純なケースでは、WHEN ステートメントごとに VALUE が存在します。 この値: Value_1、Value_2… は単一の CASE_Expression と順番に比較されます。 結果は、各 WHEN ステートメントの TRUE/FALSE 条件で評価されます。
例えば: |
Searched Caseでは、WHEN文ごとにBoolean_Expressionが存在します。 この Boolean_Expressions: Boolean_Expression_1、Boolean_Expression_2、... は、各 WHEN ステートメントの TRUE/FALSE 条件を評価します。
例えば: |
| 単純なケースは等価性チェックのみをサポートします。 つまり、CASE_Expression = VALUE_1、VALUE_2...
例えば: |
Boolean_Expression_N を使用すると、Search Case はブール値を返すすべての演算をサポートします。これには、等しい演算子と等しくない演算子が含まれます。
例えば: |
ネストされた CASE: IF ELSE の CASE
我々は使用することができます IF ELSE 内の CASE。 以下は MS-SQL コードの例です。
DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 190;
IF @Flight_Ticket > 400
PRINT 'Visit Nearby Tourist Location';
ELSE
BEGIN
SELECT
CASE
WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
END AS Location
END
上記の例では、CASE は IF…ELSE ステートメント内で NESTED です。
まず、IF ステートメントが実行され、if Case 条件が実行されます。 SQLサーバー False の場合、ELSE ステートメントが実行されます。
それ以外の場合は、SQL 内にネストされた CASE ステートメントが含まれます。フライト チケットの値に応じて、次の結果のいずれかが表示されます。
- 航空券が $400 を超える場合、システムは「近くの観光地に行く」と印刷します。
- 航空券が $0 から $100 までの場合、システムは「Visit Los Angeles」と印刷します。
- 航空券が $101 から $200 までの場合、システムは「Visit New York」と印刷します。
- 航空券が $201 から $400 までの場合、システムは「Visit Europe」と印刷します。
ネストされた CASE: CASE 内の CASE
SQL では CASE 内で CASE を使用できます。 以下は MS-SQL コードの例です。
DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 250;
SELECT
CASE
WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.'
WHEN @Flight_Ticket < 400 THEN
CASE
WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
END
END AS Location
上記の例では、CASE は別の CASE ステートメント内で NESTED されています。
システムは外側の CASE の実行から始まります。 Flight_Ticket < $400 の場合、内部 CASE が実行されます。
航空券の価値に応じて、次のいずれかの結果が表示されます。
- 航空券が $400 を超える場合、システムは「近くの観光地に行く」と印刷します。
- 航空券が $0 から $100 までの場合、システムは「Visit Los Angeles」と印刷します。
- 航空券が $101 から $200 までの場合、システムは「Visit New York」と印刷します。
- 航空券が $201 から $400 までの場合、システムは「Visit Europe」と印刷します。
アップデートのあるケース
前提: 以下に示すように、99 つの列と XNUMX つの行を持つ「GuruXNUMX」というテーブルがあると仮定します。
さらなる例では「Guru99」テーブルを使用します
UPDATE とともに CASE を使用できます。 以下は MS-SQL コードの例です。
UPDATE Guru99 SET Tutorial_Name = ( CASE WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.' WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL' WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.' WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.' END )
上記の例では、UPDATE ステートメントで CASE が使用されています。
Tutorial_Name 値に応じて、Tutorial_Name 列が THEN ステートメント値で更新されます。
- Tutorial_Name = 'SQL' の場合、Tutorial_Name を '構造化クエリ言語' に更新します
- Tutorial_Name = 'PL/SQL' の場合、Tutorial_Name を ' に更新しますOracle PL/SQL」
- Tutorial_Name = 'MSSQL' の場合、Tutorial_Name を ' に更新しますMicrosoft SQL』
- Tutorial_Name = 'Hadoop' の場合、Tutorial_Name を 'Apache Hadoop' に更新します
Guru99 テーブルにクエリを実行して、更新された値を確認してみましょう。
注文者によるケース
Order By で CASE を使用できます。 以下は MS-SQL コードの例です。
Declare @Order Int; Set @Order = 1 Select * from Guru99 order by CASE WHEN @Order = 1 THEN Tutorial_ID WHEN @Order = 2 THEN Tutorial_Name END DESC
ここでは CASE が Order By とともに使用されます。
@Order が 1 に設定され、最初の WHEN ブール式が TRUE と評価されると、Tutorial_ID が Order by Condition に選択されます。
興味深い事実!
- CASE は、別の CASE および別の IF…ELSE ステートメント内にネストできます。
- SELECT に加えて、CASE は別のものと併用できます。 SQL UPDATE、ORDER BY などの句。
製品概要
- MS SQL には、単純 CASE と検索 CASE の XNUMX 種類の CASE があります。
- ELSE は CASE ステートメントではオプションです。











