MySQLでCASE文を使って条件に応じてテーブルの行の値を置き換える方法
MySQLで条件を設定して行の値を置き換えたい場合は、CASE文を使用します。CASE文を使うことで、UPDATE文の中で各レコードの値に応じて異なる値を柔軟に設定できます。
ここでは、実際にテーブルを作成し、データを挿入して、CASE文による置き換えの手順を順番に解説します。
1. テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1481
-> (
-> PlayerScore int
-> );
Query OK, 0 rows affected (0.42 sec)
2. レコードの挿入
INSERTコマンドを使って、テーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable1481 values(454);
Query OK, 1 row affected (0.41 sec)
mysql> insert into DemoTable1481 values(765);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1481 values(890);
Query OK, 1 row affected (0.09 sec)
3. 挿入したデータの確認
SELECT文ですべてのレコードを表示して確認しましょう。
mysql> select * from DemoTable1481;
実行すると、以下のような結果が出力されます。
+-------------+
| PlayerScore |
+-------------+
| 454 |
| 765 |
| 890 |
+-------------+
3 rows in set (0.00 sec)
4. CASE文で行の値を置き換える
次が本題となる、MySQLテーブルの行を条件に応じて置き換えるクエリです。UPDATE文とCASE文を組み合わせることで、既存の値ごとに新しい値を割り当てています。
mysql> update DemoTable1481
-> set PlayerScore= case when PlayerScore=454 then 1256
-> when PlayerScore=765 then 1865
-> when PlayerScore=890 then 3990
-> end
-> ;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3 Changed: 3 Warnings: 0
このクエリでは、PlayerScoreの値が「454」なら「1256」に、「765」なら「1865」に、「890」なら「3990」にそれぞれ置き換えられます。
5. 更新結果の確認
もう一度SELECT文を実行して、テーブルのレコードが正しく更新されたか確認しましょう。
mysql> select * from DemoTable1481;
実行すると、以下のようにすべての値が置き換わっていることがわかります。
+-------------+
| PlayerScore |
+-------------+
| 1256 |
| 1865 |
| 3990 |
+-------------+
3 rows in set (0.00 sec)
まとめ
MySQLで条件に基づいて複数の行の値を一度に置き換えたい場合、UPDATE文とCASE文を組み合わせるのが効果的です。個別にUPDATE文を実行する必要がなく、1つのクエリで効率的に処理できるため、大量データの一括更新にも活用できます。なお、CASE文でどの条件にも一致しない値はNULLになる点に注意し、必要に応じてELSE句を追加すると安全です。
-
MySQLでインデックス付きのテーブルを作成する方法を徹底解説
MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp
-
MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック
MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ