表から条件に合うレコードを削除するSQLの命令。
DELETE 文とは、表から条件に合うレコードを削除する SQL の命令のことです。条件に合った行(レコード)を表から丸ごと取り除きます。
身近な例で考えると、図書館の蔵書台帳から、廃棄した本の登録を消す作業に似ています。値の一部だけを直す UPDATE と違い、DELETE は「その本の記録を1件まるごと消す」というイメージです。
上のツールで▶ボタンを押すと、WHERE で削除する対象の行を選び、その行が表から取り除かれていく流れを確認できます。
DELETE 文の基本の形は、対象の表と、削除する行の条件でできています。とてもシンプルです。
DELETE FROM 表 WHERE 条件
それぞれの役割は次のとおりです。
・DELETE FROM 表:どの表からレコードを削除するかを指定する
・WHERE 条件:どの行を削除するかを絞り込む
・列名は書かない:DELETE は行(レコード)単位の削除なので、SELECT のように列を指定しない
ここで混同しやすいのが DROP TABLE との違いです。DELETE は表の中の行(データ)を消すだけで、表という入れ物は残ります。一方 DROP TABLE は表の定義ごと丸ごと消します。「中身を消す」のが DELETE、「箱ごと捨てる」のが DROP と覚えると区別しやすいです。
INSERT・SELECT・UPDATE・DELETE の4つをまとめてDML(=データ操作言語)と呼びます。DELETE はそのうち「条件に合う行を行ごと消す」専用の命令です。
なぜ DELETE が必要か。UPDATE は値を書き換えるだけで、行そのものは残ります。「退職した社員の情報を完全に消す」「期限切れの予約を削除する」のように、行そのものを表から取り除きたいときに DELETE を使います。
DELETE はデータを消す操作なので、元に戻すことが難しい点が他の DML と大きく違います。INSERT は再度追加できますが、削除したデータは直前にバックアップがなければ復元できません。だからこそ WHERE で対象を正確に絞り込むことが特に重要です。
| 命令 | 消えるもの | 表の入れ物 | WHEREで絞れる |
|---|---|---|---|
| DELETE | 条件に合う行(データ) | 残る | できる |
| TRUNCATE | 全行(データ) | 残る | できない |
| DROP TABLE | 全行+表の定義 | 消える | できない |
「全部消したい」場合でも、目的によって使う命令が変わります。3つの違いを整理しましょう。
・DELETE:WHERE で絞った行だけを消す。表の入れ物は残る。行を選んで消したいときに使う
・TRUNCATE TABLE(=切り捨て):全行をまとめて消す。DELETE より高速。表の入れ物は残る。全件削除したいが表の構造は残したい場合
・DROP TABLE(=削除):全行+表の定義(列の設定など)ごと丸ごと消す。表そのものが不要なときに使う
身近な例で考えると、ゴミ箱の中身を捨てる(DELETE)・ゴミ箱を空にする(TRUNCATE)・ゴミ箱ごと処分する(DROP TABLE)という違いです。DELETE は「選んで消す」ことができる唯一の命令なので、WHERE による絞り込みが重要になります。
DELETE で最も注意すべきなのが WHERE 句の書き忘れです。WHERE を省略すると、表のすべての行が削除対象になってしまいます。
・WHERE あり:WHERE 部署='営業' なら営業部の行だけが消える
・WHERE なし:DELETE FROM 社員 だと全レコードが消え、表が空になる
削除したデータは元に戻すのがとても難しいため、これは UPDATE 以上に怖い事故になり得ます。名簿から1人だけ消すつもりが、全員分を消してしまうようなものです。DELETE を実行する前には「WHERE で対象を正しく絞れているか」を必ず確認することが大切です。