MySQLストアドプロシージャでIF ELSEを使った条件付きクエリを実装する方法
ストアドプロシージャで条件付きMySQLクエリを実装する
MySQLで条件付きのクエリを実行したい場合、ストアドプロシージャ内でIF ELSE構文を活用するのが効果的です。本記事では、実際にテーブルを作成し、条件によって異なるテーブルを参照するストアドプロシージャの作成手順を、具体例とともにわかりやすく解説します。
1. 最初のテーブルを作成する
まずはサンプル用のテーブル「DemoTable1」を作成しましょう。
mysql> create table DemoTable1
(
Id int
);
Query OK, 0 rows affected (0.62 sec)2. テーブルにレコードを挿入する
INSERTコマンドを使って、いくつかのレコードを追加します。
mysql> insert into DemoTable1 values(10); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable1 values(20); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable1 values(30); Query OK, 1 row affected (0.12 sec)
SELECT文ですべてのレコードを確認してみましょう。
mysql> select *from DemoTable1;
実行結果は以下の通りです。
+------+ | Id | +------+ | 10 | | 20 | | 30 | +------+ 3 rows in set (0.00 sec)
3. 2つ目のテーブルを作成する
続いて、比較用のもうひとつのテーブル「DemoTable2」を作成します。
mysql> create table DemoTable2 ( Id int ); Query OK, 0 rows affected (1.07 sec)
こちらにもレコードを挿入します。
mysql> insert into DemoTable2 values(40); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable2 values(50); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable2 values(60); Query OK, 1 row affected (0.11 sec)
SELECT文で内容を確認します。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+------+ | Id | +------+ | 40 | | 50 | | 60 | +------+ 3 rows in set (0.00 sec)
4. 条件分岐を含むストアドプロシージャを作成する
ここが本題です。引数として受け取った値が40以上かどうかを判定し、参照するテーブルを切り替えるストアドプロシージャを作成します。ストアドプロシージャを定義する際は、あらかじめDELIMITERで区切り文字を変更しておくのがポイントです。
mysql> DELIMITER //
mysql> CREATE PROCEDURE Conditional_Query(id int)
BEGIN
IF id >=40 THEN
Select * from DemoTable2;
ELSE
Select * from DemoTable1;
END IF;
END
//
Query OK, 0 rows affected (0.21 sec)
mysql> DELIMITER ;このプロシージャでは、以下のようなロジックになっています。
- 引数
idが40以上の場合 →DemoTable2の全レコードを返す - 引数
idが40未満の場合 →DemoTable1の全レコードを返す
5. ストアドプロシージャを呼び出して動作を確認する
作成したプロシージャは、CALLコマンドで呼び出せます。まずは引数に100を渡してみましょう。
mysql> call Conditional_Query(100);
100は40以上なので、DemoTable2のデータが返されます。
+------+ | Id | +------+ | 40 | | 50 | | 60 | +------+ 3 rows in set (0.00 sec) Query OK, 0 rows affected (0.03 sec)
次に、条件が逆になるよう13という別の値を渡してみます。
mysql> call Conditional_Query(13);
13は40未満なので、今度はDemoTable1のデータが返されました。
+------+ | Id | +------+ | 10 | | 20 | | 30 | +------+ 3 rows in set (0.00 sec) Query OK, 0 rows affected (0.02 sec)
まとめ
このように、ストアドプロシージャ内でIF ELSE構文を使えば、引数の値に応じて実行されるクエリを柔軟に切り替えることができます。条件分岐を活用することで、アプリケーション側のコードをシンプルに保ちながら、データベース側で処理を完結させられるのが大きなメリットです。ぜひ実際の開発でも活用してみてください。
-
MySQLストアドプロシージャでIF-ELSEを実装する方法
MySQLのストアドプロシージャ内で条件分岐を行いたい場合、IF-ELSE構文を使用します。この記事では、基本構文から実際のストアドプロシージャの作成・実行まで、サンプルコード付きでわかりやすく解説します。IF-ELSEの基本構文ストアドプロシージャ内でif-elseを実装するには、以下の構文を使用します。if yourCondition then yourStatement1; else yourStatement2; end if;条件式(yourCondition)が真(TRUE)の場合は最初のステートメントが実行され、偽(FALSE)の場合はelse以降のステートメント
-
MySQLストアドプロシージャ内で動的SQLクエリを実装する方法
ストアドプロシージャ内で動的SQLクエリを実行するには、PREPARE STATEMENT(プリペアドステートメント)の仕組みを利用します。まずはサンプル用のテーブルを作成しましょう。1. テーブルの作成mysql> create table DemoTable2033 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> ); Query OK, 0 rows affected (1.61 sec)2. レコードの挿入INSERTコマン