MySQLの単一クエリで列全体を更新せずに範囲内の特定レコードのみを更新する方法
はじめに
MySQLでは、UPDATE文とWHERE句を組み合わせることで、列全体を一括更新するのではなく、条件に一致する特定のレコードだけを選択的に更新できます。本記事では、「Position(順位)」カラムの値が指定した範囲内にあるレコードのみを、単一のクエリで更新する方法を、具体的なサンプルコードとともに解説します。
サンプルテーブルの作成
まず、以下のコマンドでテーブルを作成します。
mysql> create table DemoTable
(
Name varchar(40),
Position int
);
Query OK, 0 rows affected (1.17 sec)
レコードの挿入
次に、INSERTコマンドを使用してテーブルにレコードを挿入します。
mysql> insert into DemoTable values('Chris',90);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David',67);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Bob',55);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Sam',40);
Query OK, 1 row affected (0.15 sec)
テーブルの内容を確認する
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
上記のコマンドを実行すると、次のような出力が得られます。
+-------+----------+ | Name | Position | +-------+----------+ | Chris | 90 | | David | 67 | | Bob | 55 | | Sam | 40 | +-------+----------+ 4 rows in set (0.00 sec)
範囲内の特定レコードのみを更新するクエリ
ここからが本題です。列全体を更新せずに、Positionの値が50より大きく90未満であるレコードのみを更新するには、以下のようにUPDATE文とWHERE句を組み合わせます。
mysql> update DemoTable
set Position=Position+10
where Position > 50 and Position < 90;
Query OK, 2 rows affected (0.11 sec)
Rows matched : 2 Changed : 2 Warnings : 0
このクエリでは、WHERE句の条件「Position > 50 AND Position < 90」に一致するレコードだけが更新対象となり、該当する2行(DavidとBob)のPosition値に10が加算されます。一方、Chris(90)とSam(40)は条件の範囲外であるため、値はそのまま変更されません。
更新後のテーブルを確認する
もう一度SELECT文を実行して、更新結果を確認してみましょう。
mysql> select *from DemoTable;
実行すると、次のような出力が表示されます。
+-------+----------+ | Name | Position | +-------+----------+ | Chris | 90 | | David | 77 | | Bob | 65 | | Sam | 40 | +-------+----------+ 4 rows in set (0.00 sec)
DavidのPositionが67から77に、BobのPositionが55から65に更新され、範囲外のChrisとSamは元の値のまま維持されていることがわかります。
まとめ
UPDATE文にWHERE句で範囲条件を指定すれば、テーブルの列全体に影響を与えることなく、目的のレコードだけを効率的に更新できます。誤ったデータの一括変更を防ぐためにも、UPDATE実行時は必ずWHERE句で対象レコードを絞り込むことが重要です。事前に同じ条件でSELECT文を実行して対象行を確認しておけば、より安全に更新作業を行えます。
-
【MySQL】全レコードを一括更新して先頭の文字だけ大文字にし、残りを小文字に変換するクエリ
はじめに MySQLでは、カラム内の文字列の先頭の文字だけを大文字にし、残りの文字をすべて小文字に変換したいケースがあります。本記事では、CONCAT()、UPPER()、LOWER()、LEFT()、SUBSTRING()といった文字列関数を組み合わせたUPDATEクエリを使って、テーブル内のすべてのレコードを一括更新する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable2017 -> ( -> Name text -> ); Query OK, 0 rows
-
MySQLクエリで列名にエイリアス(別名)を設定する方法
MySQLでは、SELECT文を使って列名に「エイリアス(別名)」を設定できます。エイリアスを利用すると、出力結果の見出しをわかりやすい名前に変更でき、レポート作成やアプリケーションでのデータ表示が格段に読みやすくなります。列名にエイリアスを設定する基本構文SELECT yourColumnName1 anyAliasName1, yourColumnName2 anyAliasName2FROM yourTableName anyAliasName;このように、列名の後にスペースを空けて任意の別名を記述するだけで、その列の表示名がエイリアスに置き換わります。テーブル名にも同様にエイリアスを設