SQLで関数を作成する際には知っておきたいSQLのIF構文。今回の記事では、実践的に使用できる関数の作成を通して、SQLのIF構文の使用方法を理解できるようにしていきましょう。
まだSQLのIF構文を使用したことがない方に向けても、手を動かして使い方を理解できるコードをご紹介していきます。それでは早速見ていきましょう。
- SQLのIF構文の概要
- IF構文の基本的な使い方
- IF構文を使った関数の作成
SQLのIF構文とは?
SQLのIF構文とは、「もしAなら〇〇を実行する。もしBなら△△を実行する。」という条件式を作れる構文のことです。MySQLのIF構文では、以下のような形式で条件式を作成することができます。
IF search_condition1(条件式1) THEN statement_list1(実行処理1); ELSEIF search_condition2(条件式2) THEN statement_list2(実行処理2); ELSE statement_list3(実行処理3); END IF;
上記の場合、条件式1がtrue(真)の場合には、実行処理1を行います。条件式2がtrue(真)の場合には、実行処理2を行います。そのどちらにも当てはまらない場合には、結果がfalseとなり、実行処理3が行われます。
また、条件式を列挙するはじめと終わりに「IF」と「END IF」を設置する決まりがあります。このように決まり切った書き方が定められているため、IF構文と呼ばれているのです。
SQLのIF構文を使用することによって、「もし時間が『朝』の場合には『おはよう』を、『昼』の場合には『こんにちは』を、そして『夜』の場合には『こんばんは』を出力する」といったことが可能となります。
最初に示したIF構文には「ELSE IF」がありましたが、不要な場合には以下のようにIF構文を記述することもできます。
IF search_condition1(条件式1) THEN statement_list1(実行処理1); ELSE statement_list2(実行処理2); END IF;
逆に複数の条件式を記述したい場合には、以下のように記述することができます。
IF search_condition1(条件式1) THEN statement_list1(実行処理1); ELSEIF search_condition2(条件式2) THEN statement_list2(実行処理2); ELSEIF search_condition3(条件式3) THEN statement_list2(実行処理3); ELSEIF search_condition4(条件式4) THEN statement_list2(実行処理4); ... ELSE statement_list5(実行処理5); END IF;
条件式を作成する際に、柔軟に「ELSE IF」の数を変えることができることを覚えておきましょう。
【関連記事】
▶︎MySQLとは?MySQLの基本から他のデータベースとの違いと優位性を解説!
▶︎MySQLやPostgreSQLをお使いの方へおススメ!Amazon Aurora
▶︎SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?
SQLのIF構文の基本的な使用方法
それでは、早速手を動かしながらSQLのIF構文を用いて基本的な使い方を覚えていきましょう。
IF文だけのシンプルな条件式
まずはIF文だけを使用したシンプルな条件式を使ってみましょう。
mysql> SELECT IF( 500 < 1000, 'YES', 'NO');
以下が出力結果です。
+------------------------------+ | IF( 500 < 1000, 'YES', 'NO') | +------------------------------+ | YES | +------------------------------+ 1 row in set (0.00 sec)
上記のIF文は「もし500が1000未満であればYESを出力する。そうでなければNOを出力する」という意味となります。上記で見たSQLのIF構文とは形が異なりますが、このような書き方も可能です。
IF文内で関数を使用する条件式
次に>IF文内で関数を使用する条件式を使ってみましょう。
mysql> SELECT IF(STRCMP(1000,100) = 1, "BIG", "SMALL");
以下が出力結果です。
+------------------------------------------+ | IF(STRCMP(1000,100) = 1, "BIG", "SMALL") | +------------------------------------------+ | BIG | +------------------------------------------+ 1 row in set (0.00 sec)
上記のIF文では、STRCMPという2つの要素を比較する関数を使用しています。この関数とIF文を用いることで「もし1000が100より大きければBIGを出力する。そうでなければSMALLを出力する」という条件式を記述することができます。
SQLのIF構文を使って関数を作ってみよう
最後にSQLのIF構文を使用した関数を実際に作成してみましょう。こちらでは「引数に入れた数字が10より大きいか少ないか、もしくは数字以外かを見分ける関数」を作成していきます。
まずは関数を作成するところからはじめます。
mysql> DELIMITER // mysql> CREATE PROCEDURE compareNumber(IN target INT) -> If target > 10 THEN SELECT 'BIGGER THAN 10'; -> ELSEIF target ELSE SELECT SELECT 'THIS IS 10!'; -> END IF; -> END -> // Query OK, 0 rows affected (0.00 sec)
では、実際に上記の関数を実行してみましょう。
mysql> CALL compareNumber(10); +-------------+ | THIS IS 10! | +-------------+ | THIS IS 10! | +-------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> CALL compareNumber(100); +----------------+ | BIGGER THAN 10 | +----------------+ | BIGGER THAN 10 | +----------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> CALL compareNumber(1); +-----------------+ | SMALLER THAN 10 | +-----------------+ | SMALLER THAN 10 | +-----------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)
関数で設定した通り、IF構文が出力結果を出し分けてくれていることが分かりますね。このようにIF文を関数で使用すると、自分専用の便利な関数を作成することができるはずです。
まとめ
今回の記事では、SQLのIF構文の基礎的な学習から始まり、実践的に使用できる関数の作成を通して、SQLのIF構文の使用方法を理解してきました。IF構文を積極的に活用することで、便利な関数を作成できるだけでなく、複雑な条件分岐も簡単に処理できるようになります。ぜひ、今回の記事を機会に、SQL文の中でIF構文を扱っていきましょう。
【関連記事】
▶︎SQL if文のサンプルコード集 NULL判定や、Switch文のような分岐をする方法
▶︎【実例で学ぶ】SQL「UPDATE」文の使い方 基礎・応用編
今回の記事では、SQLのIF構文の説明に「MySQL」を用いています。関係データベース管理システム(RDBMS)には、他にも「PostgreSQL」や「Firebird SQL」などがあります。それぞれでIF構文の形が若干異なりますので、MySQL以外のRDBMSを使用する際には、公式ドキュメントを参考にしてみましょう。