【SQL】UPDATE文の書き方と使い方の基本

SQLでデータベースのデータを更新するUPDATE文の基本的な使い方を解説します。テーブルの全データを一度に更新する方法から、WHERE句で特定の行だけを安全に変更する方法、複数の項目をまとめて更新する書き方までを学びます。応用としてCASE文による複雑な一括更新も紹介します。

作成日: 更新日:

開発環境

  • OS: Windows10
  • DatabaseGUI: TablePlus
  • MySQL: 8.0.42

UPDATE文とは

UPDATE文は、データベースのテーブルに保存されている既存のデータを、新しい情報に変更(更新)するためのSQL文です。

SQLとはデータベースを操作するための命令文のことで、その中でもUPDATE文は「書き換える」という役割を持っています。テーブルは、Excelのシートのように行と列で構成されたデータの集まりをイメージしてください。

例えば、会員情報を管理するテーブルに登録されているユーザーの住所が引越しで変わった場合や、商品の価格が変更になった場合など、すでに入力されているデータを新しい情報に書き換える際にUPDATE文を使用します。

UPDATE文の基本構文

UPDATE文は、データベースのテーブルに既に存在するデータを新しい値に更新するための命令です。

構文は主に3つの部分から構成されています。

  1. UPDATE テーブル名 どのテーブルのデータを更新するかを指定します。

  2. SET カラム名 = 新しい値 どのカラムの値を、どのような新しい値に変更するかを指定します。複数のカラムを同時に更新したい場合は、カンマ(,)で区切って記述します。

  3. WHERE 条件式 どの行のデータを更新対象とするかを指定する、非常に重要な部分です。この条件に一致する行だけが更新されます。もしWHERE句を省略すると、テーブル内の全ての行が更新されてしまうため、十分に注意してください。

1UPDATE
2    テーブル名
3SET
4    カラム名1 = 新しい値,
5    カラム名2 = 新しい値,
6    ...
7WHERE
8    条件式;

サンプルコード

ここでは、SQLのUPDATE文を使ってテーブルのデータを更新する方法を、具体的なサンプルコードとともに解説します。UPDATE文は、データベースに保存されている情報を変更するために使用する、非常に重要な命令です。

sql/chapter10/01.sql

テーブル内の特定の列(カラム)の値を、すべての行で同じ値に更新する場合に使用します。

1-- 全件更新
2UPDATE
3	students
4SET
5	class_id = 5;

このコードは、studentsテーブルに含まれるすべての行に対して、class_idというカラムの値を5に設定します。WHERE句(条件を指定する部分)がないため、テーブルの全データが更新対象となる点に注意が必要です。

sql/chapter10/02.sql

特定の条件に一致する行だけを選んでデータを更新したい場合は、WHERE句を使用します。これにより、意図しないデータを更新してしまうリスクを減らすことができます。

1-- WHERE句で条件に一致する行だけを更新
2UPDATE
3	students
4SET
5	class_id = 5
6WHERE
7	class_id IS NULL;
8

このコードは、studentsテーブルの中でclass_idカラムの値がNULL(空の状態)である行だけを対象に、class_idの値を5に更新します。WHERE句で条件を指定することで、更新範囲を限定しています。

sql/chapter10/03.sql

一度のUPDATE命令で、複数のカラムを同時に更新することも可能です。SET句に、更新したいカラムと値をカンマ(,)で区切って複数記述します。

1-- 複数のカラムを同時に更新
2UPDATE
3	students
4SET
5    last_name = '斎藤',
6    first_name = '五郎'
7WHERE
8	id = 1;
9

このコードは、id1の行を対象に、last_nameカラムを'斎藤'に、first_nameカラムを'五郎'に同時に変更します。

sql/chapter10/04.sql

複数の行に対して、それぞれ異なる値に更新したい場合があります。1行ずつUPDATE文を実行することもできますが、CASE文を使うと一度の命令で効率的に処理できます。

1-- 異なる値を更新するには工夫が必要
2-- 通常は1件ずつ更新 or CASE文 or JOIN句 を使う
3-- CASE文を使って複数の行を一括更新
4UPDATE
5	students
6SET
7	class_id = CASE
8		id
9		WHEN 1 THEN 1
10		WHEN 2 THEN 1
11		WHEN 3 THEN 1
12		WHEN 4 THEN 1
13		WHEN 5 THEN 2
14		WHEN 6 THEN 2
15		WHEN 7 THEN 2
16		WHEN 8 THEN 2
17		WHEN 9 THEN 3
18		WHEN 10 THEN 3
19		WHEN 11 THEN 3
20		WHEN 12 THEN 3
21		WHEN 13 THEN 4
22		WHEN 14 THEN 4
23		WHEN 15 THEN 4
24		WHEN 16 THEN 4
25		WHEN 17 THEN 4
26		WHEN 18 THEN NULL
27		WHEN 19 THEN NULL
28		WHEN 20 THEN NULL
29		ELSE class_id
30	END
31WHERE
32	id BETWEEN 1
33	AND 20;

このコードは、idが1から20までの行を対象に、idの値に応じてclass_idの値をそれぞれ異なる値に更新します。

  • CASE id ... ENDは、idカラムの値によって処理を分岐させる命令です。
  • WHEN 1 THEN 1は、「もしid1なら、class_id1にする」という意味です。
  • ELSE class_idは、WHENで指定したどの条件にも当てはまらなかった場合に適用されます。ここでは元の値を維持するように指定しており、意図しないデータの変更を防いでいます。

このようにCASE文を活用することで、複雑な条件での一括更新を一つのSQL文で実現できます。

おわりに

今回は、SQLでデータを更新するUPDATE文の基本的な書き方と使い方を学びました。特に、意図しない全件更新を防ぐためにWHERE句で更新対象の行を正しく指定することが最も重要なポイントです。また、複数のカラムを一度に更新する方法や、CASE文を使って条件ごとに異なる値へ一括更新する応用的なテクニックも紹介しました。これらの使い方をマスターし、安全かつ効率的にデータを操作できるようになりましょう。

【SQL】UPDATE文の書き方と使い方の基本 | いっしー@Webエンジニア