SQL UPDATE SET WHERE — 既存行の変更
UPDATE SET WHEREを使用したSQL行の更新方法。単一・複数カラムの更新、サブクエリ更新、PostgreSQLとMySQLのUPDATE JOINを解説します。
DML Commands
詳細な説明
安全なデータ更新
UPDATE文は既存の行を変更します。最も重要なルール:テーブルの全行を意図的に更新する場合を除き、必ずWHERE句を含めてください。
基本的な更新
UPDATE employees
SET salary = 85000
WHERE id = 42;
複数カラムの更新
UPDATE employees
SET salary = salary * 1.10,
updated_at = CURRENT_TIMESTAMP
WHERE department_id = 3;
サブクエリによる更新
UPDATE employees
SET department_id = (
SELECT id FROM departments WHERE name = 'Engineering'
)
WHERE name = 'Alice Smith';
JOINを使った更新
PostgreSQLはFROMを使用:
UPDATE employees e
SET salary = salary * 1.10
FROM departments d
WHERE e.department_id = d.id
AND d.name = 'Engineering'
RETURNING e.name, e.salary;
MySQLはJOINを使用:
UPDATE employees e
JOIN departments d ON e.department_id = d.id
SET e.salary = e.salary * 1.10
WHERE d.name = 'Engineering';
安全のためのヒント
- まずSELECTでテスト:同じWHERE句を使って
UPDATE ... SET ...をSELECT *に置き換え、影響される行をプレビューします。 - トランザクション内で実行:
BEGIN; UPDATE ...; SELECT ...; COMMIT;(間違っていればROLLBACK)。 - スコープを制限:広範な条件ではなく、具体的なWHERE条件を使用します。
ユースケース
特定の部署の全従業員に給与増額を適用したり、特定の条件に一致する複数のレコードのステータスフィールドを更新する必要がある場合。