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句と組み合わせることで、更新対象の行を絞り込むことも可能です。大量データの条件付き更新が必要な場面でぜひ活用してください。
-
JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法
executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手
-
PythonからMySQLのIF()関数を使う方法|SELECT文で条件分岐してデータを判定する
MySQLのIF()関数は、条件に応じて異なる値を返すための条件分岐用の関数です。指定した条件が真(TRUE)の場合と偽(FALSE)の場合で、それぞれ別の値を返すことができます。この記事では、PythonからMySQLデータベースに接続し、SELECT文の中でIF()関数を活用してデータを条件付きで取得する方法を解説します。IF()関数の構文IF(条件, 真の場合の値, 偽の場合の値)IF()関数はSELECT句と組み合わせて使用でき、特定の基準に基づいて取得結果を切り替えることができます。PythonでMySQLのテーブルからIF()関数を使ってデータを取得する手順mysql.connec