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

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の挙動も考慮して設計することが重要です。

  1. JavaでMySQLデータベースのレコードを更新する方法【UPDATE文の使い方を実例で解説】

    MySQLデータベースのテーブルに格納されたデータを更新するには、UPDATEコマンドを使用します。本記事では、UPDATE文の基本構文から、実際にテーブルを作成し、Java(JDBC)経由でレコードを更新するまでの一連の手順を、サンプルコード付きで詳しく解説します。 UPDATE文の基本構文 MySQLで既存のデータを更新する場合、以下の構文を使用します。 update テーブル名 set カラム名1 = 値1, ....N where 条件; where句で条件を指定しないと、テーブル内のすべてのレコードが更新されてしまうため注意が必要です。 ステップ1:テーブルの作成 まずは更新用のサン

  2. JavaでMySQLデータベースのデータを削除する方法|DELETE文の使い方を徹底解説

    MySQLデータベースからデータを削除するには、DELETEコマンドを使用します。まずは基本となる構文を確認しておきましょう。 DELETE文の基本構文 delete from テーブル名 where 条件; WHERE句で条件を指定すると、該当するレコードだけをピンポイントで削除できます。逆に条件を指定しなかった場合、テーブル内の全データが削除されてしまうため、実行前には必ず条件を確認してください。 本記事では、JavaプログラムからMySQLデータベースのデータを削除する具体的な手順を解説します。はじめにサンプル用のテーブルを作成し、テストデータを挿入していきましょう。 サンプルテーブルの