SQL UPDATE文でデータを更新する
UPDATE文でデータベースに新しいデータを更新する方法を紹介します。
「社員マスタ」というテーブルがあります。カラムは下記のとおりです。
| 社員コード | 社員名 | 年齢 | 
|---|---|---|
| 1 | テスト社員1 | 42 | 
| 2 | テスト社員2 | 30 | 
| 3 | テスト社員3 | 20 | 
テスト社員2の年齢を31歳に更新したい場合、以下のようなSQLを実行します。
UPDATE 社員マスタ T1
SET T1.年齢 = 31
WHERE T1.社員コード = 2| 社員コード | 社員名 | 年齢 | 
|---|---|---|
| 1 | テスト社員1 | 42 | 
| 2 | テスト社員2 | 31 | 
| 3 | テスト社員3 | 20 | 
自身の値を参照する
全社員の年齢を+1する場合は以下のようにします。
UPDATE 社員マスタ T1
SET T1.年齢 = T1.年齢 + 1
--全社員が対象なのでWHERE句は指定しません| 社員コード | 社員名 | 年齢 | 
|---|---|---|
| 1 | テスト社員1 | 43 | 
| 2 | テスト社員2 | 31 | 
| 3 | テスト社員3 | 21 | 
副問い合わせの結果をUPDATE
以下のテーブルがあります。
| 社員コード | 社員名 | 年齢 | 退職年齢 | 退職フラグ | 
|---|---|---|---|---|
| 1 | テスト社員1 | 42 | null | 0 | 
| 2 | テスト社員2 | 30 | null | 0 | 
| 3 | テスト社員3 | 20 | null | 0 | 
少し考えにくいテーブル構成ですが、「社員マスタ」に加え、以下のテーブルがあるとします。
| 社員コード | 退職年齢 | 
|---|---|
| 1 | 30 | 
| 3 | 15 | 
「社員マスタ」の退職年齢の値を「退職社員マスタ」の退職年齢で更新する。
「退職社員マスタ」に登録されている社員は「社員マスタ」の退職フラグの値を1に更新する。
SQLは以下のようになります。
UPDATE 社員マスタ T1
SET
  T1.退職年齢 = (
    SELECT S1.退職年齢
    FROM 退職社員マスタ S1
    WHERE T1.社員コード = S1.社員コード
  )
  ,T1.退職フラグ = 1
WHERE EXISTS (
  SELECT 1
  FROM 退職社員マスタ S1
  WHERE T1.社員コード = S1.社員コード
)| 社員コード | 社員名 | 年齢 | 退職年齢 | 退職フラグ | 
|---|---|---|---|---|
| 1 | テスト社員1 | 42 | 30 | 1 | 
| 2 | テスト社員2 | 30 | null | 0 | 
| 3 | テスト社員3 | 20 | 15 | 1 | 
SETする値を取得する副問い合わせだけでなく、WHERE句で更新するデータを絞り込む副問い合わせも指定する必要があります。