SQLのUPDATE文とは?UPDATE文の基本の使い方を詳しく紹介!

SQLのUPDATE文とは?UPDATE文の基本の使い方を詳しく紹介!のアイキャッチイメージ

SQLのUPDATE文とは?


SQLはリレーショナルデータベースを操作する時に使用する言語です。SQLには四大命令文のSELECT、INSERT、UPDATE、DELETEがあります。データベースはOracle、SQL Server、MySQLなど様々な製品がありますが、SQLの基本文法はどれも同じです。

データベースに対してSELECT文は選択、INSERT文は追加、DELETE文は削除を行い、今回説明するUPDATE文は更新ができます。UPDATE文が更新するデータベースの対象はテーブルと言われ、複数のカラム(列)を持つレコード(行)の構造になっています。

サンプルのテーブル

以下のような「Test」という名前のテーブルがあるとします。id・name・age・statusがカラムで、3件のレコードがあります。

id name age status
1 山田太郎 30 教師
2 鈴木花子 17 高校生
3 佐藤一郎 9 中学生

このテーブルをSQLで更新しましょう。UPDATE文の基本文法は以下のようになります。

UPDATE テーブル名 SET カラム名=値

UPDATE SETだけだと全てのカラムが更新される

では実際にUPDATE文を実行してみましょう。

UPDATE Test SET age=10

実行すると、テーブルは以下のようになります。ageのカラムが全て10に更新されます。なおテーブルの内容を全て表示するSQL文は「SELECT * FROM Test」です。

id name age status
1 山田太郎 10 教師
2 鈴木花子 10 高校生
3 佐藤一郎 10 中学生

UPDATEとSETだけの場合、全てのレコードが更新されます。しかし実際には特定のレコードだけ更新したいことが多いでしょう。それにはどうしたらよいのでしょうか。

WHERE節で1つのレコードだけ更新できる

特定のレコードだけを更新する場合、以下のようにUPDATE文にWHERE節の条件文を追加します。

UPDATE テーブル名 SET カラム名=値 WHERE カラム名=値

それでは以下を実行します。

UPDATE Test SET age=15 WHERE name=’鈴木花子’

これで以下のようにnameが鈴木花子のレコードだけが更新されました。

id name age status
1 山田太郎 30 教師
2 鈴木花子 15 高校生
3 佐藤一郎 9 中学生

なお=を!=にすると等しくないという意味になります。以下を実行すると、

UPDATE Test SET age=15 WHERE name!=’鈴木花子’;

以下のようになります。nameが鈴木花子以外のレコードが更新されました。

id name age status
1 山田太郎 15 教師
2 鈴木花子 17 高校生
3 佐藤一郎 15 中学生

ANDとOR

WHERE節にはANDを使うことができます。AでかつBという意味です。以下を実行すると、

UPDATE Test SET age = 3 WHERE id=2 AND age=17

以下のようになります。

1 山田太郎 30 教師
2 鈴木花子 3 高校生
3 佐藤一郎 9 中学生

ORも使用できます。ORはまたはという意味です。以下を実行すると、

UPDATE Test SET age = 3 WHERE id=1 OR age=17

以下のようになります。2件のレコードが更新されていますね。

id name age status
1 山田太郎 3 教師
2 鈴木花子 3 高校生
3 佐藤一郎 9 中学生

BETWEEN ANDは範囲指定が可能

BETWEEN ANDを使うと、範囲指定ができます。以下を実行すると、

UPDATE Test SET status=’十代の若者’ WHERE age BETWEEN 10 AND 19;

以下のようになります。指定する2つの数字は~以上~以下で、その値も含むことに注意してください。

id name age status
1 山田太郎 30 教師
2 鈴木花子 17 十代の若者
3 佐藤一郎 9 中学生

INはリスト指定が可能

INを使うと指定したリストにマッチするレコードを対象にできます。以下のようにすると、

UPDATE Test SET status=’十代の奇数年齢’ WHERE age IN(11,13,15,17,19);

以下のようになります。条件の合う真ん中のレコードだけが更新されています。

1 山田太郎 30 教師
2 鈴木花子 17 十代の奇数年齢
3 佐藤一郎 9 中学生

LIKEで文字列マッチングが可能

LIKEを使うと文字列のマッチングができます。以下のようにすると、

UPDATE Test SET status=’花を含む’ WHERE name LIKE ‘%花%’;

以下のようにnameに’花’が含まれるレコードが更新されます。

id name age status
1 山田太郎 30 教師
2 鈴木花子 17 花を含む
3 佐藤一郎 9 中学生

以下のようにすると、

UPDATE Test SET status=’名字が〇田で名前が2文字’ WHERE name LIKE ‘_田__’;

以下のようになります。

id name age status
1 山田太郎 30 名字が〇田で名前が2文字
2 鈴木花子 17 高校生
3 佐藤一郎 9 中学生

LIKEで%は0文字以上の連続する文字列、_は任意の1文字という意味です。わかりにくいかもしれませんが、色々と試せば理解できるでしょう。

SETは2つ以上の更新内容を記述できる

なおUPDATE文のSETは,で区切って2つ以上の更新内容を記述することができます。以下のようにすれば、

UPDATE Test SET age=6,status=’小学生’ WHERE name=’鈴木花子’

以下のように2か所が更新されます。

id name age status
1 山田太郎 30 教師
2 鈴木花子 6 小学生
3 佐藤一郎 9 中学生

計算式を使うことも可能

SQLのUPDATE文は計算式を使うこともできます。以下を実行すると、

UPDATE Test SET age = age + 5

以下のようになります。全てのageに5が加算されます。なお計算式の場合の=は「等しい」という意味ではなく、「右辺を左辺に代入する」という意味で使われているので注意してください。

id name age status
1 山田太郎 35 教師
2 鈴木花子 22 高校生
3 佐藤一郎 14 中学生

CASE節も使える

SQLにはCASE節という条件分岐ができる構文があります。UPDATE文にもこれを使用できます。CASE文は以下のように記述します。

UPDATE テーブル名 SET カラム名 = WHEN CASE 条件 THEN 条件が成り立つ時の処理 ELSE 条件が成り立たない時の処理 END

今回のサンプルのテーブルに対して以下を実行してみましょう。ageが10を超える場合は2倍、そうでなければ5を引きます。

UPDATE Test SET age = CASE WHEN age > 10 THEN age*2 ELSE age-5 END

結果は以下のようになります。

id name age status
1 山田太郎 60 教師
2 鈴木花子 34 高校生
3 佐藤一郎 4 中学生

ORDER BYとLIMITを活用する

SQLのUPDATE文でORDER BYとLIMITを使うと便利な時があります。以下はIDを昇順に評価して、上位2件までを更新します。

UPDATE Test SET age = 50 ORDER BY id LIMIT 2

結果は以下になります。idが1と2のレコードが対象になっています。

id name age status
1 山田太郎 50 教師
2 鈴木花子 50 高校生
3 佐藤一郎 9 中学生

以下のようにDESCを使うと降順で評価されます。

UPDATE Test SET age = 50 ORDER BY id DESC LIMIT 2

今度はidが2と3のレコードが対象になっています。

id name age status
1 山田太郎 30 教師
2 鈴木花子 50 高校生
3 佐藤一郎 50 中学生

SQLのUPDATE文は更新をするための命令文

SQLのUPDATE文について解説しましたが、ご理解頂けましたでしょうか。
SQLの4大命令はデータベースエンジニアにとって基本の必須知識なので、しっかりマスターしてSQLを使いこなしましょう。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。