SQL入門 STEP8|DELETEでデータを削除しよう
不要になったデータを削除してみよう
STEP6ではINSERTを使ってデータを追加し、STEP7ではUPDATEを使って登録済みのデータを変更しました。
今度は、
「登録した商品が不要になった」
「間違えて登録したデータを消したい」
という場合を考えてみましょう。
テーブルに登録されているデータを削除するときは、DELETEを使います。
DELETEとは?
テーブルに登録されているデータを削除するときに使うSQLです。
例えば、
「商品IDが9の商品を削除する」
といった操作ができます。
ただし、DELETEしたデータはSELECTのように見るだけではなく、実際にテーブルから削除されます。
そのため、実行する前に「本当にこのデータを削除していいのか」を確認することが大切です。

DELETEは本当にデータが消えるんだね。
実行する前にちゃんと確認しよう!
まずは削除する商品を確認しよう
今回は、商品ID9の「ノートPCスタンド」を削除してみます。
いきなりDELETEするのではなく、まずSELECTで対象を確認します。
SELECT * FROM products
WHERE product_id = 9;STEP7まで記事どおりに進めていれば、次の商品が表示されます。
product_id | product_name | price
-----------+--------------------+------
9 | ノートPCスタンド | 4500削除したい商品と合っていることを確認できました。
それでは、この商品を削除してみましょう。
DELETEを実行してみよう
商品ID9を削除するSQLは次のとおりです。
DELETE FROM products
WHERE product_id = 9;実行できたら、もう一度SELECTしてみます。
SELECT * FROM products
WHERE product_id = 9;今度はデータが表示されません。
商品ID9のデータがproductsテーブルから削除されたためです。

SELECTして何も出てこなければ、ちゃんと削除できたってことだね♪
DELETEの書き方を確認しよう
先ほど実行したSQLを分けて見てみましょう。
DELETE FROM products
WHERE product_id = 9;基本的な形は次のとおりです。
DELETE FROM テーブル名
WHERE 条件;まず、
DELETE FROM productsで、どのテーブルからデータを削除するのかを指定しています。
続いて、
WHERE product_id = 9で、削除するデータを絞り込んでいます。
つまり、
DELETE FROM products
WHERE product_id = 9;は、
「productsテーブルから、商品IDが9のデータを削除する」
という意味になります。
DELETEでもWHEREがとても大切
STEP7のUPDATEでも、WHEREの書き忘れに注意しました。
DELETEでも同じです。
次のSQLを見てください。
DELETE FROM products;このSQLは実行しないでください。
WHEREがないため、削除する商品が絞り込まれていません。
実行すると、productsテーブルに登録されているすべてのデータが削除されます。
テーブルそのものは残りますが、中の商品データはなくなります。
DELETEのWHERE忘れに注意!
1件だけ削除するなら、
DELETE FROM products
WHERE product_id = 9;のように対象を指定します。
一方、
DELETE FROM products;では、テーブル内のすべてのデータが削除対象になります。
DELETEを実行する前に、WHEREが正しく書かれているか必ず確認しましょう。

UPDATEと同じで、DELETEもWHEREを忘れると大変!
ここはしっかり確認だね!
DELETEする前にSELECTする習慣をつけよう
DELETEを書くときは、次のような流れで操作すると安全です。
例えば、商品ID8を削除したいとします。
まずはSELECTします。
SELECT * FROM products
WHERE product_id = 8;これで、
「自分が削除しようとしているデータだけが表示されているか」
を確認します。
問題がなければ、同じWHEREを使ってDELETEを書きます。
DELETE FROM products
WHERE product_id = 8;今回は商品ID8をこの後も使うので、こちらのDELETEは実行しません。
大切なのは、
SELECTで対象を確認 → DELETEを実行
という流れです。
DELETEするときの確認手順
- SELECTで削除対象を確認する
- WHEREの条件が正しいか確認する
- DELETEを実行する
- SELECTでもう一度確認する
DELETEを書くときは、この流れを習慣にしておきましょう。
WHEREがあっても複数件削除されることがある
WHEREを書けば、必ず1件だけ削除されるわけではありません。
例えば、次の条件を考えてみます。
WHERE price < 5000これは、
「価格が5000円未満」
という条件です。
この条件に当てはまる商品が3件あれば、その3件すべてが対象になります。
そのため、
DELETE FROM products
WHERE price < 5000;を実行すると、5000円未満の商品がすべて削除されます。
今回は実行しません。
WHEREがあるから1件とは限らない
WHEREは「1件を指定するもの」ではなく、条件に合うデータを指定するものです。
条件に10件のデータが当てはまれば、10件すべてがDELETEの対象になります。
UPDATEでも同じでしたね。
DELETEの前にSELECTするのは、WHEREが正しいかだけでなく、何件のデータが対象になっているのかを見るためでもあります。
UPDATEとDELETEを比べてみよう
ここまでで、UPDATEとDELETEの両方を使いました。
書き方を並べてみると、違いが分かりやすくなります。
データを変更する場合は、
UPDATE products
SET price = 7000
WHERE product_id = 6;データを削除する場合は、
DELETE FROM products
WHERE product_id = 6;です。
UPDATEは、指定したデータを残したまま内容を変更します。
DELETEは、指定したデータそのものを削除します。
どちらにも共通しているのがWHEREです。
「どのデータを対象にするのか」
を間違えないことが、UPDATEやDELETEでは特に重要になります。
DROP TABLEとの違いは?
STEP2では、DROP TABLEも使いました。
DELETEとDROP TABLEは、どちらも「削除する」という点では似ていますが、削除するものが違います。
DELETE
DELETE FROM products
WHERE product_id = 9;テーブルの中にあるデータを削除します。
productsというテーブル自体は残ります。
DROP TABLE
DROP TABLE products;こちらはテーブルそのものを削除します。
テーブルの中のデータだけでなく、productsというテーブル自体がなくなります。
DELETEとDROP TABLEの違い
DELETE
→ テーブルの中にあるデータを削除する
DROP TABLE
→ テーブルそのものを削除する
名前は似ていませんが、どちらも削除に関係するSQLなので混同しないようにしましょう。
ここまででCRUDがそろった
STEP3からここまでで、データを扱う基本的な操作を一通り経験しました。
それがCRUD(クラッド)です。
| 操作 | SQL | 内容 |
|---|---|---|
| Create | INSERT | データを追加する |
| Read | SELECT | データを取得する |
| Update | UPDATE | データを更新する |
| Delete | DELETE | データを削除する |
「CreateなのにCREATE TABLEじゃなくてINSERTなの?」
と思うかもしれません。
CRUDでいうCreateは、データを新しく作る操作を指しているため、SQLではINSERTが該当します。
CREATE TABLEはテーブルそのものを作るSQLなので、ここは分けて考えましょう。

追加・取得・更新・削除!
これでデータを扱う基本操作がひと通りそろったんだね♪
現在の商品データを確認しよう
最後に、現在のproductsテーブルを確認しておきましょう。
SELECT * FROM products
ORDER BY product_id ASC;記事どおりに進めていれば、商品ID9のノートPCスタンドは削除されています。
今回「実行しないでください」と書いたDELETEは実行せず、商品ID1~8のデータを残しておきましょう。
このデータは次のSTEPでも使います。
よくある間違い
WHEREを書き忘れる
DELETEで最も注意したいところです。
DELETE FROM products;このSQLではすべてのデータが削除対象になります。
1件だけ削除したい場合は、WHEREで対象を指定します。
WHEREの条件を間違える
商品ID9を削除するつもりで、
WHERE product_id = 8と書けば、商品ID8が対象になります。
SQLとして正しいため、エラーにならず削除されてしまいます。
だからこそ、DELETE前のSELECT確認が大切です。
DELETEとDROP TABLEを混同する
データを削除したいだけならDELETEです。
DELETE FROM products
WHERE product_id = 9;DROP TABLE products;を実行すると、productsテーブルそのものが削除されます。
何を削除したいのかを確認してから使いましょう。
STEP8のまとめ
STEP8のポイント
DELETEを使うと登録済みのデータを削除できるWHEREで削除するデータを絞り込む- WHEREがないDELETEはすべてのデータが削除対象になる
- WHEREがあっても複数件が削除対象になることがある
- DELETEの前後にSELECTで対象を確認する
- DELETEはデータ、DROP TABLEはテーブルそのものを削除する
- SELECT・INSERT・UPDATE・DELETEの4つをCRUDと呼ぶ
DELETEまで使えるようになり、データの追加・取得・更新・削除を一通り操作できるようになりました。
特にUPDATEとDELETEでは、SQLが実行できることよりも、意図したデータだけを対象にできているかが大切です。
迷ったときは、まず同じWHEREを使ってSELECTしてみましょう。

STEP8クリア!
CRUDもそろったね!削除するときはSELECTで確認するのを忘れずに♪
次のSTEPへ
ここまでは、商品を1件ずつ見たり、条件に合った商品を取得したりしてきました。
次は少し違う使い方をしてみます。
「商品は全部で何件ある?」
「一番高い商品はいくら?」
「商品の平均価格は?」
こうしたことを調べるために使えるのが、COUNTやMAX、AVGなどの集計関数です。
学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。
