DELETEは、テーブルに存在する行を削除するコマンドであり、下記の基本構文に従って実行されます。

DELETE基本構文
DELETE FROM テーブル名
 WHERE 条件式

WHERE句に指定された抽出条件に該当する行を削除します。WHERE句を書かない場合は、全行が削除されます。UPDATE文同様、この点は十分に注意しましょう。

なお、DELETE文はあくまでテーブルに含まれるデータ(行)を削除するためのものです。そのため、WHERE句を書かずに「DELETE FROM テーブル名」を実行したとしても、テーブル自体は残っています。テーブルごとすべて削除するにはDROP TABLE文を使用します。DROP TABLE文ですべて削除した後、データを再登録するには、CREATE TABLE文でテーブルの作成から行う必要があります。

DELETE文を使って、id(社員番号)が「0001」の行を削除する例を以下に示します。

DELETE FROM Staff WHERE id = '0001';

このように、WHERE句を使用することで、削除対象行の条件を指定して、一部の行のみ削除することができます。

TRANCATE文との違い

標準SQLではテーブルからデータを削除する方法として、上記のDELETE文のみが用意されています。しかし、多くのDBMS製品では、DELETE文とは別にTRUNCATE(トランケート)文が用意されています。OracleDBやMySQL、PostgreSQLなどもこのTRUNCATE文が用意されています。

TRANCATE文はDELETE文と違い、WHERE句で条件を指定して、一部の行だけを削除するということはできません。必ずテーブル全行が削除されます。そのため、基本構文も非常にシンプルとなります。

TRANCATE基本構文
TRANCATE テーブル名

全行削除であれば、DELETE文でも可能なのに、なぜ、TRANCATE文が用意されているのでしょう。それは、DELETEよりも削除処理が高速に行えるためです。

DELETE文はDMLの中でも実行時間が多く要する処理であるため、全行削除してもかまわない場合は、TRANCATE文を使用することで実行時間が短縮できます。なお、OracleDBではTRANCATE文をDMLではなくDDLとして定義しています。DMLでないということは、OracleDBでは、TRANCATE実行後、暗黙のCOMMITが発行され、ROLLBACKができません。

DMLまとめ

ここまで、INSERT文、UPDATE文、DELETE文について見てきました。各々、構文が微妙に違っており、いざそれらのコマンドを実行しようとしても、記憶が曖昧でなかなか書けないケースもめずれしくありません。

覚え方のコツとして、
INSERT INTO文、UPDATE テーブル名 SET文、DELETE FROM文というように前置詞とセットで覚えると忘れにくいです。