SQL Server IF…ELSE 条件文: T-SQL 選択例
⚡ スマートサマリー
IF…ELSE は SQL Server の制御フロー文であり、ブール条件が真と評価された場合に 1 つの T-SQL ブロックを実行し、同じ条件が偽と評価された場合にオプションの代替ブロックを実行します。

なぜ条件文が必要なのでしょうか?
SQL Server の条件文を使用すると、さまざまな条件に対して異なるロジックとアクションを定義できます。条件文で定義された条件に基づいて、異なるアクションを実行できます。実際の生活では、他のアクティビティや状況の結果に応じて、多くのアクションを実行することになります。
条件文の実際の例をいくつか挙げます。
- 明日雨が降ったら、ドライブ旅行を計画しよう。
- もし私の住む街からの航空券が400ドル以下なら、ヨーロッパへ旅行に行きます。そうでなければ、近場の観光地に行く方を選びます。
ここでは、上記のロードトリップのような一つの行動が、「明日雨が降るかどうか」という別の活動の結果に条件付きで依存していることがわかります。同様に、MS SQLサーバー また、T-SQLステートメントを条件付きで実行する機能も提供します。
SQL Server の IF…ELSE ステートメント
MS SQL では、IF…ELSE は条件文の一種です。IF…ELSE を使用すると、任意の T-SQL ステートメントを条件付きで実行できます。以下の図は、SQL Server における IF および ELSE 分岐の動作を説明しています。
- 条件が真と評価された場合、SQL Server の IF 条件に続く T-SQL ステートメントが実行されます。
- 条件がFalseと評価された場合、ELSEキーワードに続くT-SQLステートメントが実行されます。
- IF T-SQL文またはELSE T-SQL文のいずれかが実行されると、その他の無条件T-SQL文の実行が続行されます。
SQLにおけるIF…ELSE構文とルール
構文:
IF <Condition> {Statement | Block_of_statement} [ ELSE {Statement | Block_of_statement}]
ルール:
- 条件はブール式である必要があります。つまり、条件が評価されるとブール値が返されます。
- SQLのIF…ELSE文は、単一のT-SQL文またはT-SQL文のブロックを条件付きで処理できます。
- ステートメントのブロックは、キーワードBEGINで始まり、キーワードENDで終わる必要があります。
- BEGINとENDを使用すると、SQL Serverは実行する必要のあるステートメントブロックを識別し、IF…ELSE T-SQLブロックの一部ではない残りのT-SQLステートメントから分離することができます。
- ELSE はオプションです。
ブール式に数値のみを使用したIF…ELSE文
最初の例では、ブール式は数値のみを使用します。以下の条件を考えてみましょう。1は1に等しいので、この条件は常に真となります。
条件: TRUE
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
真の条件(1=1)でクエリを実行すると、IF分岐メッセージが表示されます。
条件: 偽
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
条件が偽(1=2)の場合、代わりにELSE分岐が実行されます。
' という名前のテーブルがあると仮定しますGuru99' は、以下に示すように、2 列 4 行で構成されます。Guru以下の例では、99' テーブルを使用します。
ブール式で変数を使用したIF…ELSE文
定数の代わりに、ブール式は 変数次の例では、整数型の変数を宣言し、その値をテストします。
条件: TRUE
DECLARE @Course_ID INT = 4 IF (@Course_ID = 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
@Course_IDが4に等しいため、IF分岐が実行され、Tutorial_IDが4である行が返されます。
条件: 偽
DECLARE @Course_ID INT = 4 IF (@Course_ID != 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
ここでは条件が偽なので、ELSE分岐が実行され、Tutorial_IDが4でないすべての行が返されます。
IF…ELSE文とBEGIN…END文
分岐で複数のステートメントを実行する必要がある場合は、それらのステートメントをBEGIN…ENDブロックで囲みます。以下の例では、各分岐で2つのSELECTステートメントを実行しています。
条件: TRUE
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
@Course_ID が 2 以下であるため、IF ブロックは BEGIN…END 内の 2 つの SELECT ステートメントを実行します。
条件: 偽
DECLARE @Course_ID INT = 2 IF (@Course_ID >=3) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
今回は条件が偽なので、ELSEブロックは2つのSELECT文を実行します。
ELSE文のないIF文
SQLでは、ELSE部分が省略可能なため、IF文をELSE部分なしで使用できます。例:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
以下のような1行が出力されます。
偽の条件を実行しても出力はありません。次のクエリを考えてみましょう。
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
結果は空です。以下をご覧ください。
ネストされたIF…ELSE文
他のいくつかとは異なり プログラミング言語SQL Serverでは、IF…ELSE条件の中にELSE IF文を挿入することはできません。代わりに、以下に示すように、IF…ELSE文をネストすることができます。
DECLARE @age INT; SET @age = 60; IF @age < 18 PRINT 'underage'; ELSE BEGIN IF @age < 50 PRINT 'You are below 50'; ELSE PRINT 'Senior'; END;
年齢が60歳の場合、ネストされたIF…ELSEは次の結果を出力します。
- @ageの値が18歳未満の場合、コードは「underage」と出力します。
- そうでない場合は、ELSE 部分が実行されます。ELSE 部分には、ネストされた IF…ELSE が含まれています。
- @age の値が 50 未満の場合、「あなたは 50 未満です」と表示されます。これらの条件のいずれも満たされない場合、コードは「シニア」と表示します。











