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を使った更新

PostgreSQLFROMを使用:

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;

MySQLJOINを使用:

UPDATE employees e
JOIN departments d ON e.department_id = d.id
SET e.salary = e.salary * 1.10
WHERE d.name = 'Engineering';

安全のためのヒント

  1. まずSELECTでテスト:同じWHERE句を使ってUPDATE ... SET ...SELECT *に置き換え、影響される行をプレビューします。
  2. トランザクション内で実行BEGIN; UPDATE ...; SELECT ...; COMMIT;(間違っていればROLLBACK)。
  3. スコープを制限:広範な条件ではなく、具体的なWHERE条件を使用します。

ユースケース

特定の部署の全従業員に給与増額を適用したり、特定の条件に一致する複数のレコードのステータスフィールドを更新する必要がある場合。

試してみる — SQL Cheat Sheet

フルツールを開く