前回の続き
今回はIF ELSE文をやります。
PRINTコマンド
IF文とは直接関係ありませんが、PRINTコマンドというのを使いながらIF文の動きを見ていこうと思います。
SELECTはテーブルのデータを出力していたのに対して、PRINTはコメントが表示されるということに違いがあります。
PRINT('ABCDE')
こんなかんじに出力されます。
IF ELSE文
では、本題に移ります。
IF ELSE文は、もし〇〇が真なら××を実行、そうでなければ△△を実行するということを行うのが目的です。
では試しに書いてみましょう。
IF 1 = 1 PRINT('A') ELSE PRINT('C')
以下の通り「A」が出力されます。
これは、1=1が真であるため、IFの中身が実行されました。
では、以下はどうでしょう。
IF 1 = 2 PRINT('A') ELSE PRINT('C')
以下の通り「C」が出力されます。
これは、1=2が偽であるため、ELSEの中身が実行されました。
さまざまな比較
上記では、等しいかという比較だけでしたが、さまざまな比較方法があります。
簡単に紹介します。
-- 否定 (3つとも、1と2は等しくないという表し方) IF NOT 1 = 2 PRINT('A') IF 1 != 2 PRINT('B') IF 1 <> 2 PRINT('C') -- 大小関係 IF 1 < 2 -- 2は1より大きい PRINT('D') IF 1 <= 2 -- 2は1以上 PRINT('E')
こんなかんじ
BEGIN ~ END
次に以下を試しに実行してみてください。
IF 1 = 1 PRINT('A') PRINT('B') ELSE PRINT('C')
以下の通りエラーになります。
これは、IFの中身に複数の処理がかかれているためにそうなりました。
SQLServerのIF ELSE文はその中で処理は1回しかおこなえません。
しかし、複数処理したいということはけっこうあるので、この問題を解決してくれるのがBEGIN ~ ENDです。
複数処理をBEGIN ~ ENDで括ってあげると、それらをまとめて一つの処理とみなしてくれます。
試しに以下の通りかいてみます。
IF 1 = 1 BEGIN PRINT('A') PRINT('B') END ELSE PRINT('C')
無事に2つのPRINTコマンドが実行されました。
応用
では、これまで学んできたことと組み合わせて使ってみたいと思います。
以下のSQLに特別な意図はなく、あくまで練習なのでそういうようにとらえてください。
IF (SELECT PhoneNumberTypeID FROM Person.PersonPhone WHERE BusinessEntityID = 1) = 1 BEGIN UPDATE Person.Person SET Suffix = 1 WHERE BusinessEntityID = 1 SELECT Suffix FROM Person.Person WHERE BusinessEntityID = 1 END ELSE PRINT('PASS')
説明をすると、Person.PersonPhoneのBusinessEntityIDが1のレコードを抽出し、さらにカラムをPhoneNumberTypeIDだけに抽出します。
BusinessEntityIDhPrimary keyなのでスカラの値で比較ができます。
もし、この結果が1と等しければ、Person.PersonのBusinessEntityIDが1のレコードにおけるSuffixを1に更新する処理を行い、さらにその結果をSELECTで表示します。
もし、IF文が偽であれば「PASS」という文字列をコメント表示させるという内容です。
ちなみに結果は真なので、以下の通りになるはずです。
以上、今回はここまで。