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

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文を実行して対象行を確認しておけば、より安全に更新作業を行えます。

  1. 【MySQL】全レコードを一括更新して先頭の文字だけ大文字にし、残りを小文字に変換するクエリ

    はじめに MySQLでは、カラム内の文字列の先頭の文字だけを大文字にし、残りの文字をすべて小文字に変換したいケースがあります。本記事では、CONCAT()、UPPER()、LOWER()、LEFT()、SUBSTRING()といった文字列関数を組み合わせたUPDATEクエリを使って、テーブル内のすべてのレコードを一括更新する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable2017 -> ( -> Name text -> ); Query OK, 0 rows

  2. MySQLクエリで列名にエイリアス(別名)を設定する方法

    MySQLでは、SELECT文を使って列名に「エイリアス(別名)」を設定できます。エイリアスを利用すると、出力結果の見出しをわかりやすい名前に変更でき、レポート作成やアプリケーションでのデータ表示が格段に読みやすくなります。列名にエイリアスを設定する基本構文SELECT yourColumnName1 anyAliasName1, yourColumnName2 anyAliasName2FROM yourTableName anyAliasName;このように、列名の後にスペースを空けて任意の別名を記述するだけで、その列の表示名がエイリアスに置き換わります。テーブル名にも同様にエイリアスを設