UPDATE文とは
UPDATE文は、データベーステーブルに既に存在するデータを変更するためのSQL命令です。新しいデータを追加するINSERT文とは異なり、既存のレコードの値を書き換える際に使用します。
例えば、顧客情報の住所変更や商品価格の更新など、日常的なデータメンテナンスで頻繁に使われる重要な操作です。
まず、これから使用する基本的なテーブル構成を確認しましょう。
animalsテーブル
id |
name |
type |
age |
|---|---|---|---|
1 |
ポチ |
イヌ |
3 |
2 |
タマ |
ネコ |
5 |
3 |
ハナ |
ウサギ |
2 |
4 |
ジロ |
NULL |
NULL |
例で使用するデータベースを作成したい方は、次のSQLスクリプトを参考にしてください。
※使用するDBMS(データベース管理システム)によって表示結果が異なる場合があります。以後のコードも同様です
UPDATE文の基本構文
UPDATE文の最もシンプルな形は「UPDATE テーブル名 SET カラム名 = 新しい値」という構造になります。この構文を使うことで、指定したテーブルの特定のカラムに新しい値を設定できます。
ただし、WHERE句を指定しない場合、テーブル内のすべてのレコードが更新されるため注意が必要です。
すべてのペットの年齢を1歳増やす例を見てみましょう。
出力結果
id |
name |
type |
age |
|---|---|---|---|
1 |
ポチ |
イヌ |
4 |
2 |
タマ |
ネコ |
6 |
3 |
ハナ |
ウサギ |
3 |
4 |
ジロ |
NULL |
NULL |
SET句による値の指定方法
SET句は、更新したいカラムとその新しい値を指定する部分です。
値の指定方法には、固定値を設定する方法と、既存の値を使った計算結果を設定する方法があります。文字列の場合はシングルクォートで囲み、数値の場合はそのまま記述します。また、現在の値に対して計算を行う場合は、「カラム名 + 数値」のような演算式を使用できます。
以下は特定のペットの名前を変更する例です。
※ここでは、最初に紹介した animals テーブルのデータを使っています。
出力結果
id |
name |
type |
age |
|---|---|---|---|
1 |
チロ |
イヌ |
3 |
2 |
タマ |
ネコ |
5 |
3 |
ハナ |
ウサギ |
2 |
4 |
ジロ |
NULL |
NULL |
条件付きUPDATE文によるデータの部分更新
WHERE句を使用することで、特定の条件に合致するレコードのみを更新できます。これにより、テーブル全体ではなく必要な部分だけを効率的に変更できるため、実際の運用では最も重要な機能の一つです。条件を適切に指定することで、データの整合性を保ちながら安全な更新作業が可能になります。
WHERE句での条件指定の基本
WHERE句では、等価比較(=)、大小比較(>、<、>=、<=)、部分一致検索(LIKE)などさまざまな条件を指定できます。複数の条件を組み合わせる場合は、AND演算子やOR演算子を使用します。条件に合致したレコードのみが更新対象となるため、意図しないデータの変更を防げます。
以下は年齢が5歳以上のペットの種類を更新する例です。
※ここでは、最初に紹介した animals テーブルのデータを使っています。
出力結果
id |
name |
type |
age |
|---|---|---|---|
1 |
ポチ |
イヌ |
3 |
2 |
シニアペット |
ネコ |
5 |
3 |
ハナ |
ウサギ |
2 |
4 |
ジロ |
NULL |
NULL |
NULL値を扱う場合の注意点
NULL値は「データが存在しない」ことを表すため、通常の比較演算子では正しく判定できません。NULL値を条件に含める場合は、IS NULL演算子やIS NOT NULL演算子を使用する必要があります。また、NULL値を持つカラムを更新する際は、意図しない結果にならないよう事前にデータの状態を確認することが重要です。
次のNULL値のデータを更新する例を見てみましょう。
※ここでは、最初に紹介した animals テーブルのデータを使っています。
出力結果
id |
name |
type |
age |
|---|---|---|---|
1 |
ポチ |
イヌ |
3 |
2 |
タマ |
ネコ |
5 |
3 |
ハナ |
ウサギ |
2 |
4 |
ジロ |
イヌ |
1 |
複数カラムの更新方法
一つのUPDATE文で複数のカラムを同時に更新したり、サブクエリを使って動的な値を設定したりすることが可能です。これらのテクニックを活用することで、より効率的で柔軟なデータ更新が実現できます。複雑な業務要件にも対応できる重要な機能です。
複数カラムを同時に更新
SET句内で複数のカラムをカンマで区切って指定することで、一回のUPDATE文で複数のカラムを同時に更新できます。この方法は処理効率が良く、データベースへのアクセス回数を減らせるためパフォーマンス向上につながります。関連する複数の項目を一括で変更する場合に特に有効です。
以下はペットの名前と年齢を同時に更新する例です。
※ここでは、最初に紹介した animals テーブルのデータを使っています。
出力結果
id |
name |
type |
age |
|---|---|---|---|
1 |
ポチ |
イヌ |
3 |
2 |
ミケ |
ネコ |
7 |
3 |
ハナ |
ウサギ |
2 |
4 |
ジロ |
NULL |
NULL |
別テーブルやJOINを活用したUPDATE文
複数のテーブル間でデータの関連性がある場合、JOINを使用して別テーブルの情報を参照しながらUPDATE文を実行できます。これにより、正規化されたデータベース構造においても効率的なデータ更新が可能になり、データの整合性を保ちながら複雑な更新処理を実現できます。
JOINを使ったUPDATEの基本
JOIN句を使用することで、複数のテーブルを結合して関連するデータを参照しながら更新処理を行えます。INNER JOIN、LEFT JOIN、RIGHT JOINなど、用途に応じて適切な結合方法を選択します。主テーブルの更新に別テーブルの情報が必要な場合に活用され、リレーショナルデータベースの特徴を最大限に活用できる手法です。
別テーブルの情報を参照してペット情報を更新する例です。
※ここでは、最初に紹介した animals テーブルのデータに加え、pet_owners テーブルも用意しています。
pet_owners は各ペットのオーナー情報を保持するテーブルで、id と pet_id、owner_name で構成されています。
これにより、JOINを使ったUPDATE文を実際に実行して結果を確認できます。
owner_id |
pet_id |
owner_name |
|---|---|---|
1 |
1 |
山田太郎 |
2 |
2 |
佐藤花子 |
3 |
3 |
鈴木一郎 |
※上記例はMySQLでの構文です。DBMSごとに構文が異なる場合や実行できない場合があります。
出力結果
id |
name |
type |
age |
|---|---|---|---|
1 |
オーナー登録済みポチ |
イヌ |
3 |
2 |
オーナー登録済みタマ |
ネコ |
5 |
3 |
オーナー登録済みハナ |
ウサギ |
2 |
4 |
ジロ |
NULL |
NULL |
別テーブルのデータを参照した更新
別テーブルに保存された最新情報や集計結果を参照して、メインテーブルのデータを更新する手法です。マスターデータの変更を関連テーブルに反映させる場合や、履歴テーブルから最新状態を復元する場合などに使用します。データの一貫性を保ちながら、効率的なデータ同期が可能になります。
以下は別テーブルの最新年齢情報を参照して更新する例です。
pet_id |
latest_age |
update_date |
|---|---|---|
1 |
8 |
2025-10-10 |
2 |
7 |
2025-10-10 |
3 |
6 |
2025-10-10 |
animals のIDに対応する最新年齢を格納した簡単なテーブルです。
update_date は最新順を取得するために使用しています。
これで前述の UPDATE 文が実行可能になります。
出力結果
id |
name |
type |
age |
|---|---|---|---|
1 |
ポチ |
イヌ |
8 |
2 |
タマ |
ネコ |
7 |
3 |
ハナ |
ウサギ |
6 |
4 |
ジロ |
NULL |
NULL |
よくある質問(Q&A)
Q: UPDATE文でWHEREを忘れるとどうなる?
A: テーブル内のすべてのレコードが更新されてしまいます。これは非常に危険な操作となるため、UPDATE文を実行する前は必ずWHERE句の条件を確認しましょう。本番環境では特に注意が必要です。
Q: 更新前のデータを確認する方法は?
A: UPDATE文を実行する前に、同じWHERE条件でSELECT文を実行して対象レコードを確認することをおすすめします。また、重要なデータの場合は事前にバックアップを取得しておくと安全です。
Q: 複数テーブルを同時に更新できる?
A: 一つのUPDATE文で直接複数テーブルを更新することはできません。ただし、トランザクションを使用して複数のUPDATE文をまとめて実行することで、データの整合性を保ちながら複数テーブルを更新できます。
Q: UPDATE文の実行速度を向上させるには?
A: WHERE句で使用するカラムにインデックスを作成する、不要なJOINを避ける、適切な条件で更新対象を絞り込むなどの方法があります。大量データの更新時は、バッチ処理として小分けにして実行するのも効果的です。
Q: エラーが発生した場合の対処法は?
A: エラーメッセージを確認して原因を特定します。よくある原因として、データ型の不一致、制約違反、権限不足などがあります。テスト環境で事前に動作確認を行うことで、多くのエラーを事前に防げます。
まとめ
SQL UPDATE文は、データベース操作における基本的でありながら非常に重要な命令です。この記事では、基本的な構文から応用的な使い方まで、実際のコード例を交えながら詳しく解説しました。
JOINの活躍場面について確認しておきましょう。
UPDATE文が活躍する場面
- 顧客情報や商品データの変更・更新時に利用
- 既存レコードの一括変更や部分更新を行う場合
- 他テーブルの情報を参照してデータを同期・反映する場合
UPDATE文を使う上で押さえておきたいポイントは次の通りです。
重要なポイント
- 基本構文のUPDATE文、SET句、WHERE句の適切な使い分けが重要
- NULL値の扱いにはIS NULL演算子を使用し、通常の比較演算子は使えない
- 複数カラムの同時更新やJOINを活用した高度な更新テクニック
- WHERE句の指定忘れによる全レコード更新を防ぐための事前確認
- サブクエリや別テーブル参照による動的な値設定の活用方法
UPDATE文をマスターすることで、データベースの効率的なメンテナンスが可能になり、実際の開発現場で求められるスキルを身に付けられます。最初は基本的な構文から始めて、徐々に複雑な条件や複数テーブルを扱う応用技術に挑戦してみてください。プログラミングを学ぶなら、手軽に学べるpaizaラーニングがおすすめです。実践的な演習問題を通じて、より深くSQL操作を習得できるでしょう。