MySQLのデータを1つのクエリで一括更新する方法(CASE句の使い方)
MySQLでは、CASEコマンドを使うことで、複数行のデータをたった1つのクエリで一括更新できます。通常、条件ごとに個別のUPDATE文を実行する必要がある場面でも、CASEを活用すれば処理をまとめられ、パフォーマンス向上にもつながります。
基本構文
一括更新の基本的な構文は以下のとおりです。
UPDATE テーブル名
SET 更新対象カラム名 = (
CASE 条件判定カラム名
WHEN 値1 THEN '更新後の値'
WHEN 値2 THEN '更新後の値'
...
N
END
)
WHERE 条件判定カラム名 IN (値1, 値2, ..., N);
この構文では、CASE句が各行ごとの条件判定カラムの値に応じて、対応する新しい値を返します。WHERE句でIN演算子を使って更新対象の行を絞り込むことで、該当レコードだけを効率よく更新できます。
サンプルテーブルの作成
それでは、実際に動作を確認してみましょう。まず、サンプル用のテーブルを作成します。
mysql> CREATE TABLE UpdateAllDemo
-> (
-> BookId int,
-> BookName varchar(200)
-> );
Query OK, 0 rows affected (1.18 sec)
テストデータの挿入
次に、INSERT文を使ってレコードを挿入します。
mysql> INSERT INTO UpdateAllDemo VALUES(1000, 'Introduction to C'); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO UpdateAllDemo VALUES(1001, 'Introduction to Java'); Query OK, 1 row affected (0.21 sec)
挿入したデータの確認
SELECT文ですべてのレコードを表示して確認しましょう。
mysql> SELECT * FROM UpdateAllDemo;
実行結果は次のとおりです。
+--------+----------------------+ | BookId | BookName | +--------+----------------------+ | 1000 | Introduction to C | | 1001 | Introduction to Java | +--------+----------------------+ 2 rows in set (0.00 sec)
CASE句を使った一括更新の実行
ここから、以下のように書籍名を一括で更新していきます。
「Introduction to C」→「C in Depth」に変更
「Introduction to Java」→「Java in Depth」に変更
先ほど紹介したCASEコマンドを使用すると、次のようなクエリになります。
mysql> UPDATE UpdateAllDemo
-> SET BookName = (
-> CASE BookId
-> WHEN 1000 THEN 'C in Depth'
-> WHEN 1001 THEN 'Java in Depth'
-> END
-> )
-> WHERE BookId IN(1000, 1001);
Query OK, 2 rows affected (0.24 sec)
「Query OK, 2 rows affected」と表示されているように、2行が同時に更新されました。個別にUPDATE文を実行することなく、1回のクエリで完了しています。
更新結果の確認
最後に、SELECT文で更新後のデータを確認します。
mysql> SELECT * FROM UpdateAllDemo;
実行結果は以下のとおりで、一括更新が正常に完了していることがわかります。
+--------+---------------+ | BookId | BookName | +--------+---------------+ | 1000 | C in Depth | | 1001 | Java in Depth | +--------+---------------+ 2 rows in set (0.00 sec)
まとめ
CASE句とIN演算子を組み合わせることで、条件の異なる複数行の更新を1つのクエリで実現できます。この手法は、大量のレコードを扱う場合にSQLの実行回数を減らせるため、アプリケーションとデータベース間の通信コスト削減やパフォーマンス改善に有効です。なお、WHERE句で対象行を必ず絞り込むこと、またCASE句で未対応の値に対するELSEの挙動も考慮して設計することが重要です。
-
JavaでMySQLデータベースのレコードを更新する方法【UPDATE文の使い方を実例で解説】
MySQLデータベースのテーブルに格納されたデータを更新するには、UPDATEコマンドを使用します。本記事では、UPDATE文の基本構文から、実際にテーブルを作成し、Java(JDBC)経由でレコードを更新するまでの一連の手順を、サンプルコード付きで詳しく解説します。 UPDATE文の基本構文 MySQLで既存のデータを更新する場合、以下の構文を使用します。 update テーブル名 set カラム名1 = 値1, ....N where 条件; where句で条件を指定しないと、テーブル内のすべてのレコードが更新されてしまうため注意が必要です。 ステップ1:テーブルの作成 まずは更新用のサン
-
JavaでMySQLデータベースのデータを削除する方法|DELETE文の使い方を徹底解説
MySQLデータベースからデータを削除するには、DELETEコマンドを使用します。まずは基本となる構文を確認しておきましょう。 DELETE文の基本構文 delete from テーブル名 where 条件; WHERE句で条件を指定すると、該当するレコードだけをピンポイントで削除できます。逆に条件を指定しなかった場合、テーブル内の全データが削除されてしまうため、実行前には必ず条件を確認してください。 本記事では、JavaプログラムからMySQLデータベースのデータを削除する具体的な手順を解説します。はじめにサンプル用のテーブルを作成し、テストデータを挿入していきましょう。 サンプルテーブルの