データを変更したいときは?SQL Server UPDATE文の基本と安全な使い方を解説
SQL Serverで既存のデータを修正したいときに使うのがUPDATE文です。
たとえば住所変更や価格改定など、テーブル内の特定の行を更新する処理で活用されます。
しかし、WHERE句の指定を誤ると全件更新やデータ破損を引き起こす危険もあります。
この記事では、UPDATE文の基本構文から実務で安全に使うためのコツまでを初心者向けにわかりやすく解説します。
目次
UPDATE文の基本構文
基本形
UPDATE文は、テーブル内のデータを変更するための命令です。基本構文は以下の通りです。
UPDATE テーブル名
SET 列名 = 新しい値
WHERE 条件;
例えば、Customersテーブルで顧客IDが100の人の住所を「大阪」に変更する場合:
UPDATE Customers
SET City = '大阪'
WHERE CustomerID = 100;
このように、WHERE句で「どの行を更新するか」を明確に指定するのが基本です。
WHERE句を使った条件付き更新
特定条件の行だけを更新する
UPDATE文では、WHERE句を使って更新対象を絞り込みます。
これを指定しないと、テーブル内の全行が更新されてしまうため非常に危険です。
-- 年齢が30歳以上の顧客のランクを「GOLD」に更新
UPDATE Customers
SET Rank = 'GOLD'
WHERE Age >= 30;
WHERE句の条件式はSELECT文と同じ書き方が可能です。
複数条件をAND/ORで組み合わせる
条件を複数指定したい場合はANDやORを使って組み合わせます。
-- 東京かつ会員ランクがSILVERの顧客だけ更新
UPDATE Customers
SET Rank = 'GOLD'
WHERE City = '東京'
AND Rank = 'SILVER';
複雑な条件を扱うときは、必ず先にSELECTで対象を確認するのが鉄則です。
複数列を同時に更新する
SET句で複数列をカンマ区切りにする
UPDATE文では、1回の実行で複数の列をまとめて変更できます。
UPDATE Employees
SET Department = '営業部',
Position = '主任'
WHERE EmployeeID = 5;
このようにSET句をカンマで区切ることで、複数列を一括更新できます。
式を使った更新
SET句では計算式を使うことも可能です。
-- 価格を10%値上げ
UPDATE Products
SET Price = Price * 1.1
WHERE Category = 'PC';
このように現在の値を参照して更新することもできます。
他のテーブルの値を使って更新する
サブクエリを使った更新
UPDATE文のSET句には、SELECT文を組み込むことができます。
これにより、他テーブルから取得した値で更新が可能です。
UPDATE Orders
SET SalesPerson = (
SELECT ManagerName
FROM Employees
WHERE Employees.EmployeeID = Orders.EmployeeID
);
このようにサブクエリを利用することで、関連テーブルのデータに基づく更新を行えます。
JOINを使った更新
SQL Serverでは、JOINを利用して他のテーブルを結合しながら更新することも可能です。
UPDATE C
SET C.Rank = 'GOLD'
FROM Customers AS C
INNER JOIN Orders AS O
ON C.CustomerID = O.CustomerID
WHERE O.TotalAmount >= 100000;
JOINを使うと、条件に柔軟性が出て実務でのメンテナンスにも便利です。
実務で気をつけたいポイント
1. WHERE句の付け忘れによる全件更新
最も多いミスが「WHERE句を省略して全行が更新される」ケースです。
実行前に必ず次のようにSELECTで確認しましょう。
-- 更新前に対象を確認
SELECT * FROM Customers WHERE City = '東京';
-- 更新実行
UPDATE Customers SET Rank = 'GOLD' WHERE City = '東京';
2. トランザクションで安全に更新する
複数テーブルを同時に更新する場合は、トランザクションを使うと安全です。
BEGIN TRANSACTION
UPDATE Orders SET Status = '完了' WHERE OrderID = 1001;
UPDATE Inventory SET Stock = Stock - 1 WHERE ProductID = 200;
COMMIT TRANSACTION;
途中でエラーが発生した場合はROLLBACKで元に戻せます。
3. 更新履歴を残す運用
重要なデータを扱う場合は、更新前後の値を履歴テーブルに残す設計が推奨されます。
トリガーや監査テーブルを併用すると安全です。
まとめと次のステップ
学んだ内容の整理
- UPDATE文は既存データの値を変更する命令。
- WHERE句を必ず指定し、対象を明確にする。
- 複数列・式・サブクエリ・JOINなど柔軟に活用可能。
- トランザクションと履歴管理で安全性を高める。
参考リンク

0 件のコメント:
コメントを投稿