SQLのUPDATE文とデータ変更の基本から応用まで解説

SQLのデータ更新について、基本的なUPDATE文の使い方から、複数テーブルの更新、パフォーマンス最適化まで詳しく解説します。実務で本当に使える技術とは?

SQLのデータ更新とUPDATE文

SQLデータ更新の3つのポイント
📝
基本構文の理解

UPDATE文の基本的な書き方とWHERE句の重要性

🔄
複数テーブル操作

JOIN句やサブクエリを使用した高度な更新処理

パフォーマンス最適化

効率的なデータ更新のためのベストプラクティス

SQLのUPDATE文の基本構文と使い方

UPDATE文の基本的な構文について説明します。以下のような形式で記述します:


UPDATE テーブル名
SET カラム名1 = 値1, カラム名2 = 値2
WHERE 条件式

 

具体例として、社員テーブルの給与を更新する場合:


UPDATE employees
SET salary = 350000
WHERE department_id = 10

SQLの複数テーブル結合による高度な更新処理

複数のテーブルを結合して更新を行う方法を紹介します。


UPDATE 主テーブル
JOIN 参照テーブル ON 主テーブル.id = 参照テーブル.id
SET 主テーブル.カラム = 参照テーブル.カラム
WHERE 条件式

 

実践的な例として、売上実績に応じて社員の給与を更新する場合:


UPDATE employees e
JOIN sales s ON e.employee_id = s.employee_id
SET e.salary = e.salary * 1.1
WHERE s.achievement_rate >= 100

SQLのデータ整合性を保つための更新テクニック

データの整合性を保ちながら更新を行うためのテクニックを紹介します:

  1. トランザクション管理
    
    BEGIN TRANSACTION
    UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1
    UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2
    COMMIT
    
  2. 条件付き更新
    
    UPDATE inventory
    SET stock_quantity = stock_quantity - @order_quantity
    WHERE product_id = @product_id
    AND stock_quantity >= @order_quantity
    

SQLの更新処理のパフォーマンス最適化

大量データの更新時のパフォーマンスを向上させるテクニックを解説します:

  1. バッチ処理による更新
    
    UPDATE products
    SET price = price * 1.05
    WHERE product_id BETWEEN 1000 AND 2000
    
  2. インデックスの効果的な使用
    
    CREATE INDEX idx_last_update ON products(last_update_date)
    UPDATE products
    SET status = 'inactive'
    WHERE last_update_date < DATEADD(month, -6, GETDATE())
    

SQLの変更履歴管理と監査ログの実装

データ更新の履歴を管理する方法について説明します:

  1. トリガーを使用した履歴管理
    
    CREATE TRIGGER tr_update_audit
    ON employees
    AFTER UPDATE
    AS
    BEGIN
        INSERT INTO employee_audit (
            employee_id,
            changed_field,
            old_value,
            new_value,
            change_date
        )
        SELECT 
            i.employee_id,
            'salary',
            d.salary,
            i.salary,
            GETDATE()
        FROM inserted i
        JOIN deleted d ON i.employee_id = d.employee_id
        WHERE i.salary <> d.salary
    END
    

 

データベースの変更履歴を管理することで、以下のメリットがあります:

  • データの変更追跡が可能
  • 問題発生時の原因特定が容易
  • コンプライアンス要件への対応
  • システム監査への対応

 

PostgreSQLの公式ドキュメント - UPDATE文の詳細な使用方法について