SQL入門 STEP8|DELETEでデータを削除しよう

karin@taishi@felmia

不要になったデータを削除してみよう

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するときの確認手順

  1. SELECTで削除対象を確認する
  2. WHEREの条件が正しいか確認する
  3. DELETEを実行する
  4. 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内容
CreateINSERTデータを追加する
ReadSELECTデータを取得する
UpdateUPDATEデータを更新する
DeleteDELETEデータを削除する

「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などの集計関数です。

→ STEP9「集計関数を使ってみよう」

学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。

→ SQL入門|初心者が基礎から学べるSQL学習ガイド

記事URLをコピーしました