SQLにおけるUPDATE文は多くのバリエーションがありますが、この記事では基本的な使用法からJOINやCASEを組みあわせて使う方法を解説します。
UPDATE文とは?
SQLのUPDATE文は、データベース内の既存のデータを変更するためのコマンドです。このコマンドには3つの基本形があります。それぞれの基本形は以下の通りです。
//全レコード更新 UPDATE テーブル名 SET 列名 = 値; //指定レコード更新 UPDATE テーブル名 SET 列名 = 値 WHERE 条件式; //複数列更新 UPDATE テーブル名 SET 列名1 = 値1, 列名2 = 値2, 列名3 = 値3 WHERE 条件式;
UPDATE
UPDATEは、データベース内のどのテーブルを更新するかを指定します。UPDATEの後には更新対象のテーブル名が続きます。
UPDATE テーブル名
SET
SETは、指定した列のデータをどのように更新するかを定義します。SETの後には、列名 = 値の形式で、更新する列名とその値を指定します。複数の列を更新する場合は、カンマで区切ります。
SET 列名1 = 値1, 列名2 = 値2
WHERE
WHEREは、どのレコードを更新するかを条件指定するためのものです。WHEREの後には、条件式を記述し、この条件に合致するレコードのみが更新されます。WHERE句が省略された場合は、テーブル内の全レコードが更新対象となります。
WHERE 条件式
WHERE句は、特定の条件下でのデータの絞り込みに使用されます。詳しくは、当ブログの【SQL入門1】WHEREで検索条件を指定する方法を解説で、WHEREの基本を詳しく解説しています。ぜひ参考にしてください。
これらの要素を組み合わせることで、全レコードの更新、特定レコードの更新、複数列の更新など、様々な更新操作を行うことができます。
≫まずは簡単30秒で無料お問い合わせから≪
UPDATE文の使い方は?
これから、実際に例を使って見ていきましょう。以下の「customer」テーブルを用います。このテーブルは広告(ad1, ad2)から購入した人の購入情報を記録しています。
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
全レコード更新
全レコード更新はテーブル内のレコードを一度に更新します。以下のクエリは「price」列を0にするクエリとなります。
UPDATE customer SET price = 0;
結果:
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 0 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 0 |
加藤 | ad1 | 2023-04-19 11:37:01 | 0 |
指定レコード更新
指定レコード更新は、「WHERE」句を用いて、条件に合致する行の、指定されたカラムのデータが新しい値に更新されます。
今回は「鈴木」さんの「price」を 5000にします
UPDATE customer SET price = 5000 WHERE name = 鈴木;
結果:
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 5000 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
複数列更新
一度のクエリでテーブルの複数列を同時に更新することもできます。
例えば、「加藤」さんの「route」列を「ad3」に、同時に「price」列を「2000」に更新する場合、次のようなクエリになります。
UPDATE customer SET route = 'ad3', price = 2000 WHERE name = '加藤';
結果:
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
加藤 | ad3 | 2023-04-19 11:37:01 | 2000 |
UPDATE文の応用
UPDATE文は他のSQLと組み合わせることができます。以下ではその方法をいくつか紹介します。
計算式の使用
例として、上記テーブルにおいて、全ての「price」列の値を10%引きに更新するケースを考えてみましょう。この場合のUPDATE文は以下のようになります。
UPDATE customer SET price = price * 0.9;
このSQL文を実行することで、全ての商品の価格が10%引きに更新されます。具体的な更新結果は以下の通りです。
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 1890 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3150 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1170 |
JOINを使ってデータを更新
UPDATE文では、JOINを用いて他のテーブルのデータを参照しながら、データの更新が可能です。これにより、異なるテーブルに格納されているデータを組み合わせて、より柔軟なデータ更新が行えます。
例:割引情報の適応
例として、以下のような「new_prices」テーブルがあるとします。
route | new_price |
---|---|
ad1 | 2000 |
ad2 | 3000 |
このテーブルを使って「customer」テーブルの「price」列を更新します。以下がそのクエリです。
UPDATE customer c JOIN new_prices np ON c.route = np.route SET c.price = np.new_price;
このクエリでは、customerテーブル(エイリアス c )とnew_pricesテーブル(エイリアス np )を「route」列でJOINし、new_pricesテーブルの「new_price」列の値でcustomerテーブルの「price」列を直接更新します。
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 2000 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3000 |
加藤 | ad1 | 2023-04-19 11:37:01 | 2000 |
JOINについては以下の記事で詳しく解説していますので、良ければ参考にしてください。
CASEと組み合わせて条件文も使える
UPDATE文では、CASE式を組み合わせることで、行ごとに異なる条件を設定してデータの更新が可能です。
例:ルートに応じた価格の変更
以下の表のデータを基に、「route」列の値に応じて「price」列の値を条件分岐させて更新する例を考えます。
UPDATE customer SET price = CASE WHEN route = 'ad1' THEN price * 0.9 -- ad1のルートは10%の割引 WHEN route = 'ad2' THEN price * 1.1 -- ad2のルートは10%の価格上昇 ELSE price -- それ以外のルートは価格変更なし END;
このクエリを実行すると、「route」の値に応じて「price」が異なる割合で更新されます。更新結果は以下の通りです。
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 1890 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3850 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1170 |
CASE式を使った条件分岐については以下の記事で詳しく解説していますので、よければ参考にしてください。
まとめ
今回はUPDATEを紹介しました。SQLの中でも重要な機能となるので、ここでしっかり理解してより良いSQL文を書けるようにしましょう。
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。
▼SQL
SQLとは?初心者向けに基礎知識から具体例まで分かりやすく解説
▼MySQL
【初心者向け】MySQLとは?SQLとの違いやメリット、使用方法をわかりやすく解説
▼WHERE
【SQL入門1】WHEREで検索条件を指定する方法を解説
▼IN
【SQL入門】IN句の使い方やサブクエリの活用方法を解説
▼CASE
5分でわかるSQLの条件分岐処理「CASE式」の使い方【完全版】
▼LIKE
【SQL】データの曖昧検索「LIKE句」の使い方!完全一致・部分一致・否定形も解説
▼BETWEEN
【SQL入門3】between演算子で抽出する範囲を指定する
▼EXISTS
【SQL】EXISTSの使い方をサンプルコードで解説
▼COUNT
SQLのCOUNTで数を数える!基礎から応用まで具体例で解説
▼GROUP BY
【SQL】GROUP BY句の使い方をサンプルコードで解説
▼ORDER BY
【SQL入門】ORDER BY句の使い方、複数条件の並び替えについて解説
▼JOIN
【SQL入門】JOINでテーブル結合!種類と使い方を解説
▼DELETE
【SQL】データ削除「DELETE文」の使い方。全件削除・複数テーブル参照も解説
▼HAVING
【SQL】HAVINGの使い方とWHEREとの違いを解説
▼INSERT
【SQL】INSERT文を使ってデータを追加する方法を解説
- 2023.09.29
- Other
Author:鷺坂りな @TechMania編集部 投稿一覧
Otherカテゴリの最新記事
-
- 2024.04.26
WebDriverとは?基礎知識やインストール手順・基本の使い方を解説
-
- 2024.04.19
403(Forbidden)エラーとは?対処法と原因を解説
-
- 2024.04.12
URLをHTTPSにするには?常時SSL化の手順を解説
-
- 2024.04.12
HTTPとは?HTTPSとの違い・安全なサイトの見極め方を解説
-
- 2024.04.05
【Wi-Fi】2.4GHzと5GHzの違い・使い分け
-
- 2024.03.28
【一覧】HTTPステータスコードの意味を解説