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