📢 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> | ||