SQLのUPDATE文はテーブルデータを更新するクエリです。本記事では基本的な使い方からJOINやCASEを組みあわせて使う方法を解説します。
UPDATE文とは
SQLのUPDATE文は、テーブル内のデータを変更するクエリです。UPDATE文を使うことで特定のデータのみを変更したり、複数の項目を変更したり、テーブル内にあるすべてのレコードを更新したりといったことができます。
【条件にあてはまるデータを更新する】
UPDATE テーブル名 SET カラム名=値 WHERE 条件;
特定のレコードのみを更新する場合は上記のようになります。
【更新する項目が複数ある場合】
複数カラムを更新する場合は以下のような記述になります。
UPDATE テーブル名 SET カラム名1=値1,カラム名2=値2,… WHERE 条件;
【全レコードを更新する場合】
テーブル内のすべてのレコードを更新する場合の記述は次のようになります。
UPDATE テーブル名 SET カラム名=値;
各項目について詳しく見ていきましょう。
UPDATE
UPDATEは、データベース内のどのテーブルを更新するかを指定します。UPDATEの後には更新対象のテーブル名が続きます。
UPDATE テーブル名
SET
SETは、指定したカラムのデータをどのように更新するかを定義します。SETの後には、カラム名 = 値の形式で、更新するカラム名とその値を指定します。複数のカラムを更新する場合は、カンマで区切ります。
SET カラム名1=値1,カラム2=値2;
WHERE
WHEREは、どのレコードを更新するかを条件指定するためのものです。WHEREの後には、条件式を記述し、この条件に合致するレコードのみが更新されます。WHERE句が省略された場合は、テーブル内の全レコードが更新対象となります。
WHERE 条件式
WHERE句は、特定の条件下でのデータの絞り込みに使用されます。詳しくは、当ブログの【SQL入門】WHEREで検索条件を指定する方法を解説で、WHEREの基本を詳しく解説しています。ぜひ参考にしてください。
これらの要素を組み合わせることで、全レコードの更新、特定レコードの更新、複数列の更新などの操作を行うことができます。
≫まずは簡単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=65 WHERE id=1005;
【実行結果】
ID(id) | 氏名(name) | 性別(gender) | 点数(point) |
1001 | 秋山 | 男 | 80 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1005 | 鈴木 | 男 | 70 |
1006 | 田中 | 男 | 90 |
1007 | 土屋 | 女 | 55 |
全レコードの更新
全レコード更新はテーブル内のレコードを一度に更新します。以下のクエリは「点数(point)」カラムを0にするクエリとなります。
【実行コード】
UPDATE test SET point=100;
【実行結果】
ID(id) | 氏名(name) | 性別(gender) | 点数(point) |
1001 | 秋山 | 男 | 100 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 100 |
1004 | 佐藤 | 男 | 100 |
1005 | 鈴木 | 女 | 100 |
1006 | 田中 | 男 | 100 |
1007 | 土屋 | 女 | 100 |
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を用いて他のテーブルのデータを参照しながら、データの更新が可能です。これにより、異なるテーブルに格納されているデータを組み合わせて、より柔軟なデータ更新が行えます。
追加されたサンプルテーブル「性別(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 | 秋山 | 1 | 80 |
1002 | 久保田 | 2 | 100 |
1003 | 佐々木 | 2 | 65 |
1004 | 佐藤 | 1 | 75 |
1005 | 鈴木 | 2 | 60 |
1006 | 田中 | 1 | 90 |
1007 | 土屋 | 2 | 55 |
CASEと組み合わせて条件文も使える
UPDATE文では、CASE式を組み合わせることで、レコードごとに異なる条件を設定してデータの更新が可能です。
※説明するうえで、現実的ではない例えになります。
「性別(gender)」カラムの値に応じて「点数(point)」カラムの値を条件分岐させて更新する例を考えます。
【実行コード】
UPDATE test SET gender=CASE
WHEN gender='男' THEN point+5 -- 男子生徒は5点加点
WHEN gender='女' 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関連記事
- RDBを操作するデータベース言語「SQL」とは?
- RDB以外のデータベース管理システム「NoSQL」とは?
- RDB管理システム「MySQL」とは?
- RDB管理システム「PostgreSQL」とは?
- RDB管理システム「SQL Server」とは?
- RDB管理システム「SQLite」とは?
- ブラウザ上でMySQLを管理できる「phpMyAdmin」とは?
- データを抽出する「SELECT」文
- データを追加する「INSERT」文
- データを削除する「DELETE」文
- データを更新する「UPDATE」文
- 抽出条件を指定する「WHERE」句
- 抽出条件を指定する「HAVING」句
- 複数の抽出条件をまとめる「IN」句
- 重複レコードを除外する「DISTINCT」
- 抽出範囲を指定する「BETWEEN」演算子
- 抽出条件を満たすレコードの存在の有無を調べる「EXISTS」句
- レコード件数を取得する集計関数「COUNT」関数
- レコードをグループ化する「GROUP BY」句
- 抽出結果を並び替える「ORDER BY」句
- テーブル間のデータを結合する「JOIN」句
- 内部結合「INNER JOIN」句
- 抽出結果を統合して表示する「UNION」句
- データの曖昧検索「LIKE」句
- 条件分岐処理「CASE」式
- 「NULL」の扱い方
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
![](https://web-img.rensa.jp.net/rensa/images/techmania/thumbnail/images/yuudou.png)
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
![](https://web-img.rensa.jp.net/rensa/images/techmania/thumbnail/images/yuudou.png)
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。
- 2023.09.29
- Other
Author:鷺坂りな @TechMania編集部 投稿一覧
Otherカテゴリの最新記事
-
- 2024.07.26
【CSS】vertical-alignの使い方、効かない原因と対処法を解説
-
- 2024.07.26
text-decorationとは?使い方をサンプルコードで解説
-
- 2024.07.19
CSSのline-heightとは?使い方をサンプルコードで解説
-
- 2024.07.12
CSSのfont-weightとは?使い方をサンプルコードで解説
-
- 2024.07.12
CSSのfont-familyとは?使い方をサンプルコードで解説
-
- 2024.07.05
CSSの「text-align」とは?使い方をサンプルコードで解説