【SQL】UPDATE文でレコードを更新する!基本の使い方から応用例まで解説

  • 2024.10.25
       
【SQL】UPDATE文の使い方を分かりやすく解説

SQLでデータベースを操作しているとき、テーブル内のデータを更新する必要が出てくることがしばしばあると思います。そんなときに役立つのが、テーブル内のデータを更新するクエリのUPDATE文です。本記事ではUPDATEの基本的な使い方からJOIN句で他のテーブルのデータを参照して更新する方法やCASE式で条件分岐させた結果によってレコードごとに更新を行う方法なども使う方法まで詳しく解説します。

UPDATE文とは

SQLのUPDATE文は、テーブル内のデータを更新するクエリです。UPDATE文を使うことで特定のデータのみを変更したり、複数の項目を変更したり、テーブル内にあるすべてのレコードを更新したりといったことができます。

【条件にあてはまるデータを更新する】

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

特定のレコードのみを更新する場合は上記のようになります。

【更新する項目が複数ある場合】

複数カラムを更新する場合は以下のような記述になります。

UPDATE テーブル名 SET カラム名1=値1,カラム名2=値2,… WHERE 条件;

【全レコードを更新する場合】

テーブル内のすべてのレコードを更新する場合の記述は次のようになります。

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

各項目について詳しく見ていきましょう。

  • UPDATE テーブル名

更新するテーブルを指定します。

  • SET カラム名=値

更新するカラム名とその値を指定します。複数のカラムを更新する場合は、カンマで区切ります。

  • WHERE 条件

条件を指定し、条件に合致するレコードが更新の対象になります。WHERE句を省略する場合は、テーブル内の全レコードが更新対象となります。

WHERE句は、特定の条件下でのデータの絞り込みに使用されます。詳しくは、当ブログの【SQL入門】WHEREで検索条件を指定する方法を解説で、WHEREの基本を詳しく解説しています。ぜひ参考にしてください。

これらの要素を組み合わせることで、全レコードの更新、特定レコードの更新、複数列の更新などの操作を行うことができます。

あなたのご希望に沿った案件が必ず見つかります
【フリーランス向け】高収入好待遇の案件をご紹介

TECH MANIA フリーランス

≫まずは簡単30秒で無料お問い合わせから≪

UPDATE文の使い方

【サンプルテーブル】

「UPDATE」文の具体的な使い方を解説していくにあたって、サンプルとして「テスト(test)」テーブルを用意しました。

「テスト(test)」テーブル

ID(id)氏名(name)性別(gender)点数(point)
1001秋山80
1002久保田100
1003佐々木65
1004佐藤75
1005鈴木60
1006田中90
1007土屋55

指定レコードの更新

指定レコード更新は、「WHERE」句を用いて、条件に合致するレコードの、指定されたカラムのデータが新しい値に更新されます。

今回は鈴木さんの「点数(point)」カラムを「65」にします。

【実行コード】

UPDATE test SET point=65 WHERE id=1005;

【実行結果】

ID(id)氏名(name)性別(gender)点数(point)
1001秋山80
1002久保田100
1003佐々木65
1004佐藤75
1005鈴木65
1006田中90
1007土屋55

指定レコードの複数カラム更新

一度のクエリでテーブルの複数列を同時に更新することもできます。

例えば、鈴木さんの「性別(gender)」カラムを「男」に、同時に「点数(point)」カラムを「70」に更新する場合、次のようなクエリになります。

【実行コード】

UPDATE test SET gender='男',point=70 WHERE id=1005;

【実行結果】

ID(id)氏名(name)性別(gender)点数(point)
1001秋山80
1002久保田100
1003佐々木65
1004佐藤75
1005鈴木70
1006田中90
1007土屋55

全レコードの更新

全レコード更新はテーブル内のレコードを一度に更新します。以下のクエリは「点数(point)」カラムを100にするクエリとなります。

【実行コード】

UPDATE test SET point=100;

【実行結果】

ID(id)氏名(name)性別(gender)点数(point)
1001秋山100
1002久保田100
1003佐々木100
1004佐藤100
1005鈴木100
1006田中100
1007土屋100

プログラミングの基礎からサイト制作まで
↓実践力が身につくプログラミングスクール↓

ITエンジニアの学校 テックマニアスクール

≫モニター割引キャンペーン実施中!≪

UPDATE文の応用

UPDATE文は他のSQLと組み合わせることができます。以下ではその方法をいくつか紹介します。

先ほどのサンプルテーブルを再度載せておきます。

「テスト(test)」テーブル

ID(id)氏名(name)性別(gender)点数(point)
1001秋山80
1002久保田100
1003佐々木65
1004佐藤75
1005鈴木60
1006田中90
1007土屋55

これに加えてもう一つ新たなテーブルを追加します。

「性別(new_gender)」テーブル

旧性別(ex_gender)性別番号(gender_number)
1
2

計算した結果で更新する

例として、上記テーブルにおいて、全ての「点数(point)」カラムの値を10点引く形で更新するケースを考えてみましょう。この場合のUPDATE文は以下のようになります。

【実行コード】

UPDATE test SET point=point-10;

【実行結果】

ID(id)氏名(name)性別(gender)点数(point)
1001秋山70
1002久保田90
1003佐々木55
1004佐藤65
1005鈴木50
1006田中80
1007土屋45

このSQL文を実行することで、全ての生徒のテストの点数が10点低く更新されます。

JOINを用いたデータ更新

UPDATE文では、JOIN句を用いて他のテーブルのデータを参照しながら、データの更新ができます。これにより、異なるテーブルに格納されているデータを組み合わせて、より柔軟なデータ更新が行えます。

個人情報の観点で「テスト(test)」テーブルの「性別(gender)」カラムのうち、「男」を「1」、「女」を「2」に変更することにしました。そこで、追加されたサンプルテーブル「性別(new_gender)」テーブルを利用し、「テスト(test)」テーブルの「性別(gender)」カラムを更新します。以下がそのクエリです。

【実行コード】

UPDATE test JOIN new_gender ON test.gender=new_gender.ex_gender SET test.gender=new_gender.gender_number;

このクエリでは、「テスト(test)」テーブルと「性別(new_gender)」テーブルを「性別(gender)」カラムで紐づけ、「性別(new_gender)」テーブルの「性別番号(gender_number)」カラムの値で「テスト(test)」テーブルの「性別(gender)」カラムを直接更新します。

JOINについてはこちらの記事で詳しく解説していますので、良ければ参考にしてください。

【実行結果】

ID(id)氏名(name)性別(gender)点数(point)
1001秋山180
1002久保田2100
1003佐々木265
1004佐藤175
1005鈴木260
1006田中190
1007土屋255

ちなみに、副問い合わせで記述する場合は以下のようなコードになります。

【実行コード】

UPDATE test SET test.gender=(SELECT new_gender.gender_number FROM new_gender WHERE test.gender=new_gender.ex_gender);

CASEと組み合わせて条件分岐でデータを更新する

UPDATE文では、条件によって結果を分岐させるCASE式を組み合わせることで、レコードごとに異なるデータの更新が可能です。

※説明するうえで、現実的ではない例えになります。

「性別(gender)」カラムの値に応じて「点数(point)」カラムの値を条件分岐させて更新する例を考えます。

【実行コード】

UPDATE test SET test.point=CASE test.gender
 WHEN '男' THEN point+5  -- 男子生徒は5点加点
 WHEN '女' THEN point-5  -- 女子生徒は5点減点
 ELSE gender                    -- それ以外のルートは価格変更なし
 END;

このクエリを実行すると、「性別(gender)」の値に応じて「点数(point)」が異なる計算式で更新されます。更新結果は以下の通りです。

【実行結果】

ID(id)氏名(name)性別(gender)点数(point)
1001秋山85
1002久保田95
1003佐々木60
1004佐藤80
1005鈴木55
1006田中95
1007土屋50

CASE式を使った条件分岐についてはこちらの記事で詳しく解説していますので、よければ参考にしてください。

まとめ

今回はUPDATEを紹介しました。SQLの中でも重要な機能となるので、ここでしっかり理解を深め、より良いSQL文を書けるようにしましょう。

SQL関連記事

SQLの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

SQLの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事