📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

Wiki がページ「条件分岐する方法(SQL Server)」を「SQL Server - 条件分岐」に、リダイレクトを残さずに移動しました
4行目: 4行目:
また、IF文を記述すれば、WHERE句の内容を変えて検索できるが、<br>
また、IF文を記述すれば、WHERE句の内容を変えて検索できるが、<br>
条件ごとに同じようなSQL文を複数記述するのは面倒なので、1行で分岐できるIIF文を記載する。<br>
条件ごとに同じようなSQL文を複数記述するのは面倒なので、1行で分岐できるIIF文を記載する。<br>
<br><br>
== IF文 ==
以下に、<code>IF</code>文のシンタックスを示す。<br>
<br>
<処理>が複数行ある場合は、<code>BEGIN</code>と<code>END</code>が必要となる。<br>
<条件>が合致する場合、配下の処理が実行されて、<code>IF</code>文の処理は終了する。<br>
<条件>が合致しない場合、配下の処理は実行されず、<code>ELSE IF</code>文または<code>ELSE</code>文に進む。<br>
<syntaxhighlight lang="sql">
IF <条件>
    BEGIN
      <処理>
    END
ELSE IF <条件>
    BEGIN
    <処理>
    END
ELSE
    BEGIN
    <処理>
    END
</syntaxhighlight>
<br>
以下の例では、6行目で値を代入した変数により、条件分岐している。<br>
また、<code>IF</code>文の条件式に丸括弧<code>()</code>を付けることができる。<br>
<syntaxhighlight lang="sql">
CREATE PROCEDURE dbo.TEST1
AS
BEGIN
    DECLARE @num1 INT
    DECLARE @msg1 VARCHAR(20)
    SET @num1 = 11
    IF (@num1 = 0)
      BEGIN
          SET @msg1 = '0です'
      END
    ELSE IF  @num1 = 1
      BEGIN
          SET @msg1 = '1です'
      END
    ELSE
      BEGIN
          SET @msg1 = 'その他'
      END
    PRINT @msg1 --1です
END
</syntaxhighlight>
<br>
また、<code>IF</code>文をネストすることもできる。<br>
<syntaxhighlight lang="sql">
CREATE PROCEDURE dbo.TEST1
AS
BEGIN
    DECLARE @num1 INT
    DECLARE @num2 INT
    DECLARE @msg1 VARCHAR(20)
    SET @num1 = 1
    SET @num2 = 1
    IF (@num1 = 1)
      BEGIN
          IF (@num2 = 1)
            BEGIN
                SET @msg1 = '1'
            END
      END
    PRINT @msg1 --1
END
</syntaxhighlight>
<br><br>
== 論理演算子の論理積 (AND) ==
論理積(AND)の左の式と右の式の両方が条件に合致する場合、真(true)となる。<br>
<syntaxhighlight lang="sql">
IF <左の条件式> AND <右の条件式>
</syntaxhighlight>
<br>
<syntaxhighlight lang="sql">
CREATE PROCEDURE dbo.T_TEST
AS
BEGIN
    DECLARE @num1 INT
    DECLARE @num2 INT
    DECLARE @msg1 VARCHAR(20)
    SET @num1 = 1
    SET @num2 = 0
    IF (@num1 = 1) AND (@num2 = 0)
      BEGIN
          SET @msg1 = 'OK'
      END
    ELSE
      BEGIN
          SET @msg1 = 'NG'
      END
    PRINT @msg1 --OKが出力される
END
</syntaxhighlight>
<br><br>
== 論理演算子の論理和 (OR) ==
論理和(OR)の左の条件式または右の条件式のどちらかが条件に合致する場合、真(true)となる。<br>
<syntaxhighlight lang="sql">
IF <左の条件式> OR <右の条件式>
</syntaxhighlight>
<br>
<syntaxhighlight lang="sql">
CREATE PROCEDURE dbo.T_TEST
AS
BEGIN
    DECLARE @num1 INT
    DECLARE @num2 INT
    DECLARE @msg1 VARCHAR(20)
    SET @num1 = 2
    SET @num2 = 0
    IF (@num1 = 1) OR (@num2 = 0)
      BEGIN
          SET @msg1 = 'OK'
      END
    ELSE
      BEGIN
          SET @msg1 = 'NG'
      END
    PRINT @msg1 --OKが出力される
END
</syntaxhighlight>
<br><br>
== 論理演算子の否定 (NOT) ==
<条件式>がfalseの場合、真(true)となる。<br>
また、<条件式>がtrueの場合、偽(false)となる。<br>
<syntaxhighlight lang="sql">
IF NOT<条件式>
-- または
IF !<条件式>
</syntaxhighlight>
<br>
以下の例では、8行目の条件式によりtrueとなり、それを否定するため、falseとなる。<br>
<syntaxhighlight lang="sql">
CREATE PROCEDURE dbo.T_TEST
AS
BEGIN
    DECLARE @num1 INT
    DECLARE @msg1 VARCHAR(20)
    SET @num1 = 9
    IF NOT(@num1 = 9)
      BEGIN
          SET @msg1 = 'OK'
      END
    ELSE
      BEGIN
          SET @msg1 = 'NG'
      END
    PRINT @msg1 --NGが出力される
END
</syntaxhighlight>
<br>
以下の例のように、<code>!=</code>演算子を使用しても否定となる。<br>
<syntaxhighlight lang="sql">
IF (@num1 != 9)
    BEGIN
      SET @msg1 = 'OK'
    END
ELSE
    BEGIN
      SET @msg1 = 'NG'
    END
</syntaxhighlight>
<br><br>
<br><br>