MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLの制御フロー関数「CASE」の仕組みと使い方を徹底解説

MySQLのCASEは、SELECT文やWHERE句などのクエリ内で条件分岐を実現できる制御フロー関数です。IF文に似た働きを持ち、条件に応じて異なる値を返すことができます。CASEには大きく分けて2つの構文が存在します。

構文1:値を比較するシンプルな形式

CASE val
WHEN compare_val1 THEN result1
WHEN compare_val2 THEN result2
.
.
.
ELSE result
END

この構文では、まず評価対象の値(val)を指定し、各WHEN句の比較値(compare_val)と順番に照合します。valがcompare_val1と一致すればresult1を返し、compare_val2と一致すればresult2を返す、という具合に処理が進みます。

どの比較値とも一致しなかった場合は、ELSE句で指定した結果が返されます。なお、ELSE句を省略して一致する値がない場合、CASEはNULLを返す点に注意しましょう。

実行例

mysql> Select CASE 100
    -> WHEN 100 THEN 'It is matched'
    -> WHEN 200 THEN 'It is not matched'
    -> ELSE 'No use of this Number'
    -> END as 'Matching the Number';
+---------------------+
| Matching the Number |
+---------------------+
| It is matched       |
+---------------------+
1 row in set (0.06 sec)

この例では、評価対象の値「100」が最初のWHEN句の「100」と一致するため、「It is matched」が返されています。

構文2:条件式を評価する検索CASE形式

CASE
WHEN condition_1 THEN result1
WHEN condition_2 THEN result2
.
.
.
ELSE result
END

この構文では、値そのものではなく条件式(condition)を評価します。上から順に条件を判定し、最初にTRUEとなった条件に対応する結果(result1、result2など)を返します。

すべての条件がFALSEだった場合には、ELSE句で指定した結果が返されます。

実行例

mysql> Select CASE
    -> WHEN (100 = 100) THEN 'It is Matched'
    -> WHEN (200 = 100) Then 'It is Not Matched'
    -> ELSE 'No use of Number'
    -> END as 'Matching the Number';
+---------------------+
| Matching the Number |
+---------------------+
| It is Matched       |
+---------------------+
1 row in set (0.00 sec)

この例では、最初の条件「100 = 100」がTRUEと判定されるため、「It is Matched」が出力されます。以降の条件は評価されません。

両者の使い分けのポイント

  • 構文1(単純CASE):特定のカラムや値と等しいかどうかを比較する場合に適しています。
  • 構文2(検索CASE):「以上」「未満」「BETWEEN」「IN」など、より複雑な条件式を使いたい場合に適しています。

CASE式はSELECT句だけでなく、ORDER BY句やUPDATE文のSET句などでも活用でき、柔軟なデータ処理を実現するうえで非常に便利な関数です。

  1. MySQLの関数からテーブル(結果セット)を返す方法|ストアドプロシージャの使い方

    MySQL関数ではテーブルを返せない結論から言うと、MySQLの関数(FUNCTION)からテーブルや結果セットを返すことはできません。MySQLの関数が返せるのは、文字列、整数、CHAR型などのスカラー値に限られます。テーブル形式のデータ(複数行・複数列の結果セット)を返したい場合は、関数ではなくストアドプロシージャ(Stored Procedure)を使用しましょう。この記事では、実際にサンプルテーブルを作成し、ストアドプロシージャで結果セットを取得する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> creat

  2. MySQLのSLEEP()関数はビジーウェイトなのか?その仕組みと実装方法を解説

    MySQLのSLEEP()関数はビジーウェイトか?結論から言うと、いいえ、MySQLのSLEEP()関数はビジーウェイト(Busy-Wait)ではありません。スリープ中もCPUを回し続けるのではなく、指定した秒数だけスレッドを休止させて処理を一時停止する仕組みになっています。それでは、実際にテーブルを作成し、SLEEP()関数の動作を確認してみましょう。1. テーブルの作成まず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable(FirstName varchar(100));Query OK, 0 rows affected (