UPDATEステートメント

UPDATEステートメントは、対象とするテーブルのデータ行(レコード)を更新することのできる、SQLにおけるデータ操作言語 (DML)ステートメントの1つです。
「UPDATE」に続いて更新するテーブル名を指定し、「SET」に続いて更新するカラムと値を記述します。
その後、テーブル内の全レコードを一括更新する場合を除き、通常はWHERE句にて更新条件を記述し、更新対象レコードを指定します。
このとき、値は更新するテーブルの定義通りに記述する必要があります。

文字列型の値を記述する際は「'(シングルクォーテーション)」で囲い、文字列値であることを示します。
NULL値を追加する場合は、NULLと記述することで指定することができますが、NOT NULL指定(NULLを許可しない制約)の列に対して指定した場合、エラーとなります。

また、値の指定はSELECT句にて別テーブル、もしくは同テーブルからWHERE句で記述した条件に該当するレコードの値を指定することができます。

文法

UPDATE テーブル名 SET カラム名1 = 更新値 [, カラム名2 = 更新値 ...]
[FROM テーブル名][WHERE 更新条件]

1列のみの条件なしUPDATE

「UPDATE」に続いて更新するテーブル名を指定し、「SET」に続いて更新するカラムと値を記述します。

使用例

例ではtable_name内の列(column)に対する値のみを指定し更新します。
where句による更新条件の指定が行われていない為、table_name内に存在するすべてのレコードのcolumnが更新されます。
table_name内に他の列の定義が存在する場合、それらの値は更新されません。

UPDATE table_name 
SET column = '20'

複数列の条件なしUPDATE

「UPDATE」に続いて更新するテーブル名を指定し、「SET」に続いて更新するカラムと値を記述します。 複数カラムを指定する場合は、「,」で区切り、カラムと値を記述します。

使用例

例ではtable_name内の列number_column, datetime_column, string_columnに対する値のみを指定し更新します。
table_name内に他の列の定義が存在する場合、それらの値は更新されません。

UPDATE table_name
SET number_column = 20, datetime_column = '2017-09-18 18:59:15.325', string_column = 'abcd'

条件ありUPDATE

更新対象レコードを限定する場合は、「WHERE」にて条件を指定します。

使用例

例ではtable_name内の key_column1 = 1001 AND key_column2 = 1 に該当するレコードのみを更新します。

UPDATE table_name
SET number_column = 20, datetime_column = '2017-09-18 18:59:15.325', string_column = 'abcd'
WHERE key_column1 = 1001 AND key_column2 = 1

サブクエリーを使用したUPDATE

「SET」で更新するカラムに対し、サブクエリーでの結果を更新値として記述することが可能です。

使用例

例ではtable_name1の key_column1 = 1001 に該当するレコードのnumber_column1を
table_name2に存在するnumber_column2の最大値で更新します。

UPDATE table_name1
SET number_column1 = (SELECT MAX(number_column2) FROM table_name2)
WHERE key_column1 = 1001


Last updated:2022/07/10
Author:efn

';