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
句で更新するデータを絞り込む副問い合わせも指定する必要があります。