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

MySQLで1つの列の複数行をまとめて更新する方法(CASE文の活用)

MySQLで単一列の複数行を一括更新するには?

MySQLで1つの列に含まれる複数の行を異なる値でまとめて更新したい場合、CASE文を使用するのが効果的です。この記事では、実際にテーブルを作成しながら、その手順をわかりやすく解説します。

1. サンプルテーブルの作成

まず、更新用のテーブルを作成しましょう。ここでは、学生IDと数学の点数を格納するテーブルを用意します。

mysql> create table updateMultipleRowsDemo
-> (
-> StudentId int,
-> StudentMathScore int
-> );
Query OK, 0 rows affected (0.63 sec)

2. レコードの挿入

次に、INSERT文を使ってテーブルにデータを登録します。

mysql> insert into updateMultipleRowsDemo values(10001,67);
Query OK, 1 row affected (0.14 sec)
mysql> insert into updateMultipleRowsDemo values(10002,69);
Query OK, 1 row affected (0.15 sec)
mysql> insert into updateMultipleRowsDemo values(10003,89);
Query OK, 1 row affected (0.14 sec)
mysql> insert into updateMultipleRowsDemo values(10004,99);
Query OK, 1 row affected (0.13 sec)
mysql> insert into updateMultipleRowsDemo values(10005,92);
Query OK, 1 row affected (0.13 sec)

3. 登録データの確認

SELECT文で全レコードを表示して、現在のデータを確認しておきましょう。

mysql> select * from updateMultipleRowsDemo;

実行結果は以下のとおりです。

+-----------+------------------+
| StudentId | StudentMathScore |
+-----------+------------------+
| 10001 | 67 |
| 10002 | 69 |
| 10003 | 89 |
| 10004 | 99 |
| 10005 | 92 |
+-----------+------------------+
5 rows in set (0.00 sec)

4. CASE文を使った複数行の一括更新

ここからが本題です。CASE文を組み合わせることで、1つのUPDATE文で複数の行をそれぞれ異なる値に更新できます。

mysql> UPDATE updateMultipleRowsDemo
-> SET StudentMathScore= CASE StudentId
-> WHEN 10001 THEN 45
-> WHEN 10002 THEN 52
-> WHEN 10003 THEN 67
-> END
-> WHERE StudentId BETWEEN 10001 AND 10003;
Query OK, 3 rows affected (0.19 sec)
Rows matched: 3 Changed: 3 Warnings: 0

このクエリのポイントは以下のとおりです。

SET句のCASE文: StudentIdの値に応じて、StudentMathScoreに代入する値を切り替えています。
WHERE句: 更新対象をStudentIdが10001〜10003の行に限定することで、意図しない行が更新されるのを防いでいます。

5. 更新結果の確認

実際に値が更新されたか、再度SELECT文で確認してみましょう。

mysql> select * from updateMultipleRowsDemo;

実行結果は以下のとおりです。

+-----------+------------------+
| StudentId | StudentMathScore |
+-----------+------------------+
| 10001 | 45 |
| 10002 | 52 |
| 10003 | 67 |
| 10004 | 99 |
| 10005 | 92 |
+-----------+------------------+
5 rows in set (0.00 sec)

StudentIdが10001、10002、10003の行だけが、それぞれ45、52、67に更新されていることが確認できました。StudentIdが10004と10005の行は更新対象外のため、元の値(99、92)のままになっています。

まとめ

MySQLで単一列の複数行を異なる値に一括更新したい場合は、UPDATE文のSET句でCASE文を使う方法が便利です。WHERE句で更新対象の範囲を明確に指定することで、安全かつ効率的にデータを更新できます。行ごとに個別にUPDATE文を実行する必要がないため、処理も高速化できるというメリットがあります。

  1. MySQLテーブルの単一カラム(列)を更新する最良の方法

    MySQLテーブルの単一の列(カラム)を更新するには、UPDATE文とSET句を使用します。基本的な構文は以下の通りです。UPDATE テーブル名 SET カラム名 = 値;それでは、実際にサンプルテーブルを作成し、動作を確認していきましょう。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1873    (    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,  &n

  2. MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法

    はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実