DELETEステートメント
DELETEステートメントは、対象とするテーブルのデータ行(レコード)を削除することのできる、
SQLにおけるデータ操作言語 (DML)ステートメントの1つです。
「DELETE」に続いて更新するテーブル名を指定します。
その後、テーブル内の全レコードを一括削除する場合を除き、通常はWHERE句にて削除条件を記述し、
削除対象レコードを指定します。
ただし、テーブル内のレコードを一括削除する場合は、「DELETE」文ではなく、
「TRUNCATE」文を使用した方がパフォーマンスが良いです。
※「TRUNCATE」は、テーブルごと削除してから再作成するのでDELETE文よりも高速です。
ただし、ROLLBACK出来ません。
文法
DELETE [FROM] テーブル名 [FROM テーブル名] [WHERE 更新条件]
条件なしDELETE
「DELETE」に続いて更新するテーブル名を指定します。
使用例
例ではtable_nameのみを指定し、当該テーブル内のレコードを削除します。
where句による更新条件の指定が行われていない為、
table_name内に存在するすべてのレコードが削除されます。
DELETE FROM table_name
条件ありDELETE
削除対象レコードを限定する場合は、「WHERE」にて条件を指定します。
使用例
例ではtable_name内の key_column1 = 1001 AND key_column2 = 1 に該当するレコードのみを削除します。
DELETE FROM table_name
WHERE key_column1 = 1001 AND key_column2 = 1
FROM句使用のDELETE
SQL Serverに限りますが、「DELETE」のテーブル指定の後に「FROM」句を記述することで
削除対象テーブルとは別のテーブルを結合し、結合したテーブルの値を使用することが可能となります。
これは行を削除するための条件として異なるテーブルの値を簡易に使用することが可能です。
使用例
例ではtable_name1とtable_name2をそれぞれのkey_column1で結合し、table_name2のstatusが'deleted'に該当するレコードのみを削除します。
DELETE FROM table_name1 FROM table_name2
WHERE table_name1.key_column1 = table_name2.key_column1 AND table_name2.status = 'deleted'