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文を実行する必要がないため、処理も高速化できるというメリットがあります。
-
MySQLテーブルの単一カラム(列)を更新する最良の方法
MySQLテーブルの単一の列(カラム)を更新するには、UPDATE文とSET句を使用します。基本的な構文は以下の通りです。UPDATE テーブル名 SET カラム名 = 値;それでは、実際にサンプルテーブルを作成し、動作を確認していきましょう。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1873 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &n
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実