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

MySQLのUPDATEクエリでCASEステートメントを使う方法【実行例つき】

UPDATEクエリの中でMySQLのCASEステートメントを使用するには、SET句の値としてCASE式を記述します。これにより、条件に応じて異なる値への一括更新が1つのクエリで実現できます。まずはサンプル用のテーブルを作成しましょう。

1. テーブルの作成

mysql> create table DemoTable
    (
    UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserScore int
    );
Query OK, 0 rows affected (0.29 sec)

2. レコードの挿入

insertコマンドを使って、テーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable(UserScore) values(100);
Query OK, 1 row affected (0.22 sec)

mysql> insert into DemoTable(UserScore) values(110);
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(UserScore) values(120);
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable(UserScore) values(200);
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(UserScore) values(230);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(UserScore) values(250);
Query OK, 1 row affected (0.03 sec)

mysql> insert into DemoTable(UserScore) values(270);
Query OK, 1 row affected (0.06 sec)

3. 挿入したデータの確認

select文でテーブル内のすべてのレコードを表示します。

mysql> select *from DemoTable;

以下のような出力が得られます。

+--------+-----------+
| UserId | UserScore |
+--------+-----------+
|      1 |       100 |
|      2 |       110 |
|      3 |       120 |
|      4 |       200 |
|      5 |       230 |
|      6 |       250 |
|      7 |       270 |
+--------+-----------+
7 rows in set (0.00 sec)

4. UPDATEクエリでCASEステートメントを使用する

以下は、UPDATEクエリの中でCASEステートメントを使い、UserScoreの値の範囲に応じて異なる更新処理を行う例です。

  • 100〜120の範囲: スコアに5を加算
  • 130〜230の範囲: スコアに10を加算
  • 250以上: スコアを5倍にする
  • 上記以外: 元の値のまま変更なし
mysql> update DemoTable
   set UserScore =
   CASE
      WHEN UserScore BETWEEN 100 AND 120
         THEN UserScore + 5
      WHEN UserScore BETWEEN 130 AND 230
         THEN UserScore +10
      WHEN UserScore >=250
         THEN UserScore * 5
      ELSE UserScore
   END;
Query OK, 7 rows affected (0.06 sec)
Rows matched: 7 Changed: 7 Warnings: 0

5. 更新結果の確認

もう一度select文を実行して、更新後のデータを確認してみましょう。

mysql> select *from DemoTable;

以下の出力から、各レコードが条件に応じて正しく更新されていることがわかります。

+--------+-----------+
| UserId | UserScore |
+--------+-----------+
|      1 |       105 |
|      2 |       115 |
|      3 |       125 |
|      4 |       210 |
|      5 |       240 |
|      6 |      1250 |
|      7 |      1350 |
+--------+-----------+
7 rows in set (0.00 sec)

このように、UPDATE文のSET句でCASE式を活用すれば、複数の条件分岐を含む一括更新をシンプルな1つのクエリで実現できます。さらにWHERE句と組み合わせることで、更新対象の行を絞り込むことも可能です。大量データの条件付き更新が必要な場面でぜひ活用してください。

  1. JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法

    executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手

  2. PythonからMySQLのIF()関数を使う方法|SELECT文で条件分岐してデータを判定する

    MySQLのIF()関数は、条件に応じて異なる値を返すための条件分岐用の関数です。指定した条件が真(TRUE)の場合と偽(FALSE)の場合で、それぞれ別の値を返すことができます。この記事では、PythonからMySQLデータベースに接続し、SELECT文の中でIF()関数を活用してデータを条件付きで取得する方法を解説します。IF()関数の構文IF(条件, 真の場合の値, 偽の場合の値)IF()関数はSELECT句と組み合わせて使用でき、特定の基準に基づいて取得結果を切り替えることができます。PythonでMySQLのテーブルからIF()関数を使ってデータを取得する手順mysql.connec