【SQL】UPDATE文を1分でわかりやすく解説

Database

テーブルのレコードを更新する場合に利用するUPDATE文について、初心者向けにわかりやすく1分で解説します。

前提となる知識は一切必要ありません。このページ内を読めば自分ひとりでテーブルのレコード更新行うことができるようサンプルコード付きでご説明します。

このページで学べる内容
  • UPDATE文の使い方/構文ルール
    • WHERE句の利用方法
    • 複数カラムのレコード更新
  • UPDATE文利用時の注意点

プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。

スポンサーリンク

SQL:UPDATE文

UPDATE文は対象テーブルのレコードを更新する場合に利用します。

例えばINSERT文でレコードを誤って登録してしまった場合にUPDATE文を利用するとその誤りを修正することが可能になります。

構文ルールは以下の通り。

-- 全レコード(全行)更新
UPDATE テーブル名
   SET 列名 = 値;

-- 指定レコード更新
UPDATE テーブル名
   SET 列名 = 値
 WHERE 条件式;

--複数列更新
UPDATE テーブル名
   SET 列名 = 値,
       列名 = 値,
       列名 = 値
 WHERE 条件式;

1つひとつ順を追って解説します。

以下のようなテーブルが存在することを前提にご説明していきます。

SQL UPDATE
サンプルテーブル

上記と同じテーブル/レコードを作成したい方は以下の記事をご覧ください。

【SQL】CREATE TABLE をわかりやすく3分で解説
【SQL】INSERT文を1分でわかりやすく解説

UPDATE:全レコード更新

まずは最もシンプルなWHERE句を用いないUPDATE文から解説します。

通常、UPDATE文はWHERE句とセットで用いますがまずは理解促進のためWHERE句なしの場合のUPDATE文について解説します。

-- 全レコード(全行)更新
UPDATE テーブル名
   SET 列名 = 値;

上記のようなUPDATE文を発行すると、指定したテーブルのすべてのレコードがSET句の値で更新されます。

UPDATE PointList 
   SET Japanese = 100;

/* Japanese列がすべて「100」に更新される
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
|  2 | 鈴木 | A     |      100 |   70 |      70 |
|  3 | 高橋 | A     |      100 |   70 |      65 |
|  4 | 中村 | A     |      100 |   65 |      85 |
|  5 | 小林 | B     |      100 |   90 |      65 |
|  6 | 山口 | B     |      100 |   85 |      85 |
|  7 | 田中 | B     |      100 |   90 |      65 |
|  8 | 伊藤 | B     |      100 |   90 |    NULL |
+----+------+-------+----------+------+---------+
*/

SET句で "Japanese = 100" と記述しているのですべてのレコードのJapanaese列が100で更新されます。

これが最も基本的なUPDATE文の動作です。

ただしほとんどの場合、すべてのレコードを一度に更新するようなことはありません。基本的には更新したいレコードを指定してUPDATE文を実行します。

更新対象のレコードを更新する場合はSELECT文DELETE文と同様にWHERE句を用います。

UPDATE:WHERE句

UPDATE文でWHERE句を用いる場合の構文ルールは以下の通り。

-- 指定レコード更新
UPDATE テーブル名
   SET 列名 = 値
 WHERE 条件式;

先ほどと同様、以下のようなテーブルを例に解説します。

SQL UPDATE
サンプルテーブル

例として、Class列が「A」のレコードのみJapanaese列を「100」にUPDATEしてみましょう。

UPDATE PointList
   SET JAPANESE = 100 
 where class ='A';

/* Class「A」のみJapanaese列がすべて「100」に更新される
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
|  2 | 鈴木 | A     |      100 |   70 |      70 |
|  3 | 高橋 | A     |      100 |   70 |      65 |
|  4 | 中村 | A     |      100 |   65 |      85 |
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |
+----+------+-------+----------+------+---------+

ご覧のようにWHERE句で指定した条件に合致するレコードのみUPDATEがなされました。

WHERE句を用いない場合、すべてのレコードが一気に更新されてしまうため、ここは細心の注意を払う必要があります。

ただし、これだけでは不十分です。最後に、Japanaese列だけでなく、Math列やEnglish列に対しても同様に更新をかけたいような場合についてご説明します。

UPDATE文:複数列の更新

UPDATE文で複数列(複数カラム)の更新を行いたい場合は以下のようにSET句に「,」区切りで列名を順に指定します。

--複数列更新
UPDATE テーブル名
   SET 列名 = 値,
       列名 = 値,
       列名 = 値
 WHERE 条件式;

こちらも先ほどと同じテーブルを対象に以下のようなSQL文を実行してみます。

-- Class「A」の人はすべて100点にする
UPDATE PointList
   SET Japanese = 100,
       Math     = 100,
       English  = 100
 WHERE Class = 'A';

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |     100 |←すべて「100」に更新
|  2 | 鈴木 | A     |      100 |  100 |     100 |←すべて「100」に更新
|  3 | 高橋 | A     |      100 |  100 |     100 |←すべて「100」に更新
|  4 | 中村 | A     |      100 |  100 |     100 |←すべて「100」に更新
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |
+----+------+-------+----------+------+---------+
*/

ご覧のようにSET句で指定したJapanaese列~English列の値が一度に更新されました。

UPDATE文のまとめ
  • UPDATE文はレコードを更新する際に利用する
  • SET句で更新対象の列(カラム)を指定する
  • WHERE句で更新対象レコードを指定する
UPDATE PointList
   SET Japanese = 100,
       Math     = 100,
       English  = 100
 WHERE Class = 'A';

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |     100 |←更新対象列
|  2 | 鈴木 | A     |      100 |  100 |     100 |←更新対象列
|  3 | 高橋 | A     |      100 |  100 |     100 |←更新対象列
|  4 | 中村 | A     |      100 |  100 |     100 |←更新対象列
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |
+----+------+-------+----------+------+---------+
*/

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

タイトルとURLをコピーしました