SQLのUPDATE文の書き方は?初心者でもわかる基本から応用まで

この記事のポイント

この記事を読むことで、SQLのUPDATE文の基本的な使い方から応用テクニックまでを習得できます。

  • UPDATE文の基本構文とSET句を使ったデータ更新の方法
  • WHERE句による条件指定とNULL値を扱う際の注意点
  • JOINや別テーブルを活用した高度なデータ更新テクニック

これらのポイントを押さえることで、効率的なデータベース操作ができるようになります。

目次

UPDATE文とは

UPDATE文は、データベーステーブルに既に存在するデータを変更するためのSQL命令です。新しいデータを追加するINSERT文とは異なり、既存のレコードの値を書き換える際に使用します。

例えば、顧客情報の住所変更や商品価格の更新など、日常的なデータメンテナンスで頻繁に使われる重要な操作です。

まず、これから使用する基本的なテーブル構成を確認しましょう。

animalsテーブル

id

name

type

age

1

ポチ

イヌ

3

2

タマ

ネコ

5

3

ハナ

ウサギ

2

4

ジロ

NULL

NULL

例で使用するデータベースを作成したい方は、次のSQLスクリプトを参考にしてください。

-- animalsテーブルの作成 CREATE TABLE animals ( id INT PRIMARY KEY, name VARCHAR(50), type VARCHAR(50), age INT ); -- データの挿入 INSERT INTO animals (id, name, type, age) VALUES (1, 'ポチ', 'イヌ', 3), (2, 'タマ', 'ネコ', 5), (3, 'ハナ', 'ウサギ', 2), (4, 'ジロ', NULL, NULL); -- 確認 SELECT * FROM animals;

※使用するDBMS(データベース管理システム)によって表示結果が異なる場合があります。以後のコードも同様です

【関連】
SQLをもっと詳しく学ぶならpaizaラーニング

UPDATE文の基本構文

UPDATE文の最もシンプルな形は「UPDATE テーブル名 SET カラム名 = 新しい値」という構造になります。この構文を使うことで、指定したテーブルの特定のカラムに新しい値を設定できます。

ただし、WHERE句を指定しない場合、テーブル内のすべてのレコードが更新されるため注意が必要です。

すべてのペットの年齢を1歳増やす例を見てみましょう。

UPDATE animals SET age = age + 1;

出力結果

id

name

type

age

1

ポチ

イヌ

4

2

タマ

ネコ

6

3

ハナ

ウサギ

3

4

ジロ

NULL

NULL

SET句による値の指定方法

SET句は、更新したいカラムとその新しい値を指定する部分です。

値の指定方法には、固定値を設定する方法と、既存の値を使った計算結果を設定する方法があります。文字列の場合はシングルクォートで囲み、数値の場合はそのまま記述します。また、現在の値に対して計算を行う場合は、「カラム名 + 数値」のような演算式を使用できます。

以下は特定のペットの名前を変更する例です。
※ここでは、最初に紹介した animals テーブルのデータを使っています。

UPDATE animals SET name = 'チロ' WHERE id = 1;

出力結果

id

name

type

age

1

チロ

イヌ

3

2

タマ

ネコ

5

3

ハナ

ウサギ

2

4

ジロ

NULL

NULL

条件付きUPDATE文によるデータの部分更新

WHERE句を使用することで、特定の条件に合致するレコードのみを更新できます。これにより、テーブル全体ではなく必要な部分だけを効率的に変更できるため、実際の運用では最も重要な機能の一つです。条件を適切に指定することで、データの整合性を保ちながら安全な更新作業が可能になります。

WHERE句での条件指定の基本

WHERE句では、等価比較(=)、大小比較(>、<、>=、<=)、部分一致検索(LIKE)などさまざまな条件を指定できます。複数の条件を組み合わせる場合は、AND演算子やOR演算子を使用します。条件に合致したレコードのみが更新対象となるため、意図しないデータの変更を防げます。

以下は年齢が5歳以上のペットの種類を更新する例です。
※ここでは、最初に紹介した animals テーブルのデータを使っています。

UPDATE animals SET type = 'シニアペット' WHERE age >= 5;

出力結果

id

name

type

age

1

ポチ

イヌ

3

2

シニアペット

ネコ

5

3

ハナ

ウサギ

2

4

ジロ

NULL

NULL

NULL値を扱う場合の注意点

NULL値は「データが存在しない」ことを表すため、通常の比較演算子では正しく判定できません。NULL値を条件に含める場合は、IS NULL演算子やIS NOT NULL演算子を使用する必要があります。また、NULL値を持つカラムを更新する際は、意図しない結果にならないよう事前にデータの状態を確認することが重要です。

次のNULL値のデータを更新する例を見てみましょう。
※ここでは、最初に紹介した animals テーブルのデータを使っています。

UPDATE animals SET age = 1, type = 'イヌ' WHERE age IS NULL;

出力結果

id

name

type

age

1

ポチ

イヌ

3

2

タマ

ネコ

5

3

ハナ

ウサギ

2

4

ジロ

イヌ

1

複数カラムの更新方法

一つのUPDATE文で複数のカラムを同時に更新したり、サブクエリを使って動的な値を設定したりすることが可能です。これらのテクニックを活用することで、より効率的で柔軟なデータ更新が実現できます。複雑な業務要件にも対応できる重要な機能です。

複数カラムを同時に更新

SET句内で複数のカラムをカンマで区切って指定することで、一回のUPDATE文で複数のカラムを同時に更新できます。この方法は処理効率が良く、データベースへのアクセス回数を減らせるためパフォーマンス向上につながります。関連する複数の項目を一括で変更する場合に特に有効です。

以下はペットの名前と年齢を同時に更新する例です。
※ここでは、最初に紹介した animals テーブルのデータを使っています。

UPDATE animals SET name = 'ミケ', age = 7 WHERE id = 2;

出力結果

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

鈴木一郎

-- pet_ownersテーブルの作成 CREATE TABLE pet_owners ( owner_id INT PRIMARY KEY, pet_id INT, owner_name VARCHAR(50) ); -- データの挿入 INSERT INTO pet_owners (owner_id, pet_id, owner_name) VALUES (1, 1, '山田太郎'), (2, 2, '佐藤花子'), (3, 3, '鈴木一郎'); -- 確認 SELECT * FROM pet_owners;
UPDATE animals a JOIN pet_owners o ON a.id = o.pet_id SET a.name = CONCAT('オーナー登録済み', a.name) WHERE o.owner_name IS NOT NULL;

※上記例は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

-- pet_updates テーブル作成 CREATE TABLE pet_updates ( pet_id INT NOT NULL, latest_age INT, update_date DATE, PRIMARY KEY (pet_id, update_date) ); -- pet_updates テーブルにサンプルデータを挿入 INSERT INTO pet_updates (pet_id, latest_age, update_date) VALUES (1, 8, '2025-10-10'), (2, 7, '2025-10-10'), (3, 6, '2025-10-10');

animals のIDに対応する最新年齢を格納した簡単なテーブルです。
update_date は最新順を取得するために使用しています。
これで前述の UPDATE 文が実行可能になります。

UPDATE animals a SET a.age = ( SELECT latest_age FROM pet_updates u WHERE u.pet_id = a.id ORDER BY update_date DESC LIMIT 1 ) WHERE EXISTS ( SELECT 1 FROM pet_updates u WHERE u.pet_id = a.id );

出力結果

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: エラーメッセージを確認して原因を特定します。よくある原因として、データ型の不一致、制約違反、権限不足などがあります。テスト環境で事前に動作確認を行うことで、多くのエラーを事前に防げます。

-- エラー確認用のSELECT文例 SELECT * FROM animals WHERE id = 1;

まとめ

SQL UPDATE文は、データベース操作における基本的でありながら非常に重要な命令です。この記事では、基本的な構文から応用的な使い方まで、実際のコード例を交えながら詳しく解説しました。

JOINの活躍場面について確認しておきましょう。

UPDATE文が活躍する場面

  • 顧客情報や商品データの変更・更新時に利用
  • 既存レコードの一括変更や部分更新を行う場合
  • 他テーブルの情報を参照してデータを同期・反映する場合

UPDATE文を使う上で押さえておきたいポイントは次の通りです。

重要なポイント

  • 基本構文のUPDATE文、SET句、WHERE句の適切な使い分けが重要
  • NULL値の扱いにはIS NULL演算子を使用し、通常の比較演算子は使えない
  • 複数カラムの同時更新やJOINを活用した高度な更新テクニック
  • WHERE句の指定忘れによる全レコード更新を防ぐための事前確認
  • サブクエリや別テーブル参照による動的な値設定の活用方法

UPDATE文をマスターすることで、データベースの効率的なメンテナンスが可能になり、実際の開発現場で求められるスキルを身に付けられます。最初は基本的な構文から始めて、徐々に複雑な条件や複数テーブルを扱う応用技術に挑戦してみてください。プログラミングを学ぶなら、手軽に学べるpaizaラーニングがおすすめです。実践的な演習問題を通じて、より深くSQL操作を習得できるでしょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. ナレッジ
  3. SQLのナレッジ記事一覧
  4. SQLのUPDATE文の書き方は?初心者でもわかる基本から応用まで