SQL入門 STEP7|UPDATEでデータを更新しよう

karin@taishi@felmia

登録済みのデータを変更してみよう

STEP6では、INSERTを使ってproductsテーブルに新しい商品を追加しました。

では、商品を登録した後に、

「価格を間違えて登録してしまった」

「商品名が変更になった」

という場合はどうすればいいでしょうか。

一度削除して登録し直すこともできますが、その必要はありません。

すでに登録されているデータを変更するときは、UPDATEを使います。

UPDATEとは?

テーブルに登録されているデータを更新するときに使うSQLです。

例えば、

  • 商品の価格を変更する
  • 商品名を変更する

といった操作ができます。

ルミィ
ルミィ

登録した後に間違いに気づいても、UPDATEで直せるんだね♪

商品の価格を変更してみよう

STEP6で登録した「Webカメラ」は、現在6000円になっています。

product_id | product_name | price
-----------+--------------+------
6          | Webカメラ     | 6000

今回は、この価格を6500円に変更してみましょう。

次のSQLを実行します。

UPDATE products
SET price = 6500
WHERE product_id = 6;

実行できたら、SELECTで確認してみます。

SELECT * FROM products
WHERE product_id = 6;

結果が、

product_id | product_name | price
-----------+--------------+------
6          | Webカメラ     | 6500

となっていれば成功です。

6000円だった価格が6500円に変更されています。

UPDATEの書き方を確認しよう

先ほど実行したSQLを分けて見てみましょう。

UPDATE products
SET price = 6500
WHERE product_id = 6;

基本的な形は次のようになります。

UPDATE テーブル名
SET カラム名 = 新しい値
WHERE 条件;

まず、

UPDATE products

で、更新するテーブルを指定しています。

次の、

SET price = 6500

では、どのカラムを、どの値に変更するのかを指定しています。

今回はpriceを6500に変更しています。

最後の、

WHERE product_id = 6

で、更新する商品を指定しています。

つまり、このSQL全体で、

「productsテーブルの商品IDが6の商品の価格を6500に変更する」

という意味になります。

UPDATEではWHEREがとても大切

UPDATEを使うときに、特に注意してほしいのがWHEREです。

先ほどは、

WHERE product_id = 6

と指定しました。

そのため、商品IDが6のWebカメラだけが更新されています。

では、WHEREを書かなかったらどうなるでしょうか。

例えば次のSQLです。

UPDATE products
SET price = 6500;

これは実行しないでください。

このSQLには、更新する商品を絞り込むWHEREがありません。

そのため、実行するとproductsテーブルに登録されているすべての商品の価格が6500になります。

UPDATEのWHERE忘れに注意!

UPDATE products
SET price = 6500
WHERE product_id = 6;

WHEREがあれば、商品IDが6のデータだけが更新されます。

一方、

UPDATE products
SET price = 6500;

では、すべてのデータが更新対象になります。

UPDATEを実行する前に、WHEREが正しく指定されているか確認しましょう。

ルミィ
ルミィ

WHEREを忘れると全部変わっちゃうの!?
UPDATEするときは、実行する前にちゃんと確認しないとだね!

更新する前にSELECTで確認しよう

UPDATEの操作に慣れてきても、WHEREの指定を間違えることはあります。

そこで覚えておきたいのが、

UPDATEする前にSELECTで対象を確認する

という方法です。

例えば、商品ID6を更新したいなら、まず次のSQLを実行します。

SELECT * FROM products
WHERE product_id = 6;

結果を見て、

6 | Webカメラ | 6500

だけが取得されていることを確認します。

その後で、

UPDATE products
SET price = 7000
WHERE product_id = 6;

を実行します。

SELECTとUPDATEで同じWHEREを使っているのがポイントです。

UPDATE前の確認

いきなりUPDATEするのではなく、

  1. SELECTで更新対象を確認する
  2. WHEREが正しいことを確認する
  3. UPDATEを実行する
  4. もう一度SELECTで結果を確認する

という流れにすると、意図しないデータを更新するミスを減らせます。

この手順は、練習中だけでなく実際にデータを扱うときにも役立ちます。

商品名を変更してみよう

UPDATEでは、数値だけでなく文字も変更できます。

商品ID9には「PCスタンド」が登録されています。

今回は、商品名を「ノートPCスタンド」に変更してみましょう。

まずは対象を確認します。

SELECT * FROM products
WHERE product_id = 9;

問題なければ、次のUPDATEを実行します。

UPDATE products
SET product_name = 'ノートPCスタンド'
WHERE product_id = 9;

文字を指定しているので、

'ノートPCスタンド'

のようにシングルクォーテーションで囲んでいます。

実行後、もう一度確認してみましょう。

SELECT * FROM products
WHERE product_id = 9;

商品名が変更されていればOKです。

複数のカラムをまとめて変更してみよう

商品名と価格を同時に変更したい場合もあります。

UPDATEでは、複数のカラムを一度に更新できます。

例えば、商品ID8のHDMIケーブルについて、

  • 商品名 → HDMIケーブル 2m
  • 価格 → 1800円

に変更してみます。

まず確認します。

SELECT * FROM products
WHERE product_id = 8;

続いてUPDATEを実行します。

UPDATE products
SET product_name = 'HDMIケーブル 2m',
    price = 1800
WHERE product_id = 8;

複数のカラムを更新するときは、SETの後ろを,で区切ります。

SET product_name = 'HDMIケーブル 2m',
    price = 1800

実行後に確認します。

SELECT * FROM products
WHERE product_id = 8;
product_id | product_name   | price
-----------+----------------+------
8          | HDMIケーブル 2m | 1800

商品名と価格の両方が変更されていれば成功です。

条件に合う複数のデータを更新することもできる

WHEREは、商品IDだけを指定するものではありません。

例えば、

WHERE price < 5000

とすれば、5000円未満の商品が対象になります。

そのため、次のようなUPDATEを書くこともできます。

UPDATE products
SET price = 5000
WHERE price < 5000;

この場合、5000円未満の商品がすべて5000円に変更されます。

SQLとしては正しい書き方ですが、今回は実行しません。

ここで覚えておきたいのは、

WHEREを書けば必ず1件だけ更新されるわけではない

ということです。

条件に当てはまるデータが3件あれば、3件とも更新されます。

だからこそ、UPDATEする前にSELECTで対象を確認することが大切です。

ルミィ
ルミィ

WHEREがあっても安心しきっちゃダメなんだね。
何件が対象になるのか、先にSELECTで見ておこう♪

更新後のproductsを確認してみよう

ここまでの操作で、いくつかの商品情報を変更しました。

最後に全体を確認してみましょう。

SELECT * FROM products
ORDER BY product_id ASC;

ここまで記事どおりに進めていれば、主な変更点は、

  • Webカメラの価格が7000円
  • PCスタンド → ノートPCスタンド
  • HDMIケーブル → HDMIケーブル 2m
  • HDMIケーブル 2mの価格が1800円

となっています。

このデータは、次のSTEPでもそのまま使います。

よくある間違い

WHEREを書き忘れる

UPDATEで特に気を付けたい間違いです。

UPDATE products
SET price = 7000;

このSQLでは、すべての商品が更新対象になります。

「1件だけ変更するつもりだった」という場合でも、SQLは書かれている内容どおりに処理します。

実行前にWHEREを確認しましょう。

WHEREの値を間違える

商品ID6を変更するつもりで、

WHERE product_id = 8

と書けば、当然ながら商品ID8が更新されます。

SQL自体は正常に実行されるため、エラーにならないのが怖いところです。

更新前のSELECTで対象を確認する習慣を付けておきましょう。

文字をシングルクォーテーションで囲んでいない

商品名を変更するときは、

SET product_name = 'ノートPCスタンド'

のように、文字を'で囲みます。

INSERTやWHEREで文字を扱ったときと同じです。

複数のカラムを更新するときにカンマを忘れる

SET product_name = 'HDMIケーブル 2m',
    price = 1800

複数のカラムを変更するときは,で区切ります。

STEP7のまとめ

STEP7のポイント

  • UPDATEを使うと登録済みのデータを変更できる
  • SETで変更するカラムと新しい値を指定する
  • WHEREで更新するデータを絞り込む
  • WHEREがないUPDATEはすべてのデータが更新対象になる
  • WHEREがあっても複数件が対象になることがある
  • 複数のカラムをまとめて変更することもできる
  • UPDATEの前後にSELECTでデータを確認する

UPDATEは便利ですが、SELECTとは違ってテーブルに保存されているデータそのものを書き換えます。

そのため、書き方だけ覚えるのではなく、

「まずSELECTで対象を確認してからUPDATEする」

ところまでセットで身につけておきましょう。

ルミィ
ルミィ

STEP7クリア!
データを変更できるようになったね。実行前のSELECTも忘れずに♪

次のSTEPへ

INSERTでデータを追加し、UPDATEで登録済みのデータを変更できるようになりました。

次は、不要になったデータをテーブルから削除してみます。

削除に使うDELETEも、UPDATEと同じようにWHEREの指定がとても重要です。

次のSTEPでは、データを安全に削除するための確認方法も一緒に見ていきましょう。

→ STEP8「DELETEでデータを削除しよう」

学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。

→ SQL入門|初心者が基礎から学べるSQL学習ガイド

記事URLをコピーしました