PR

【SQL】DELETE文を1分でわかりやすく解説

Database

テーブルからレコード削除を行うDELETE文について初心者向けにわかりやすく1分で解説します。

参考 SQLとは?

前提となる知識は一切必要ありません。このページ内を読めば自分ひとりでテーブルからレコード削除が行えるようになるようサンプルコード付きでご説明します。

このページで学べる内容
  • DELETE文文の使い方/構文ルール
    • 削除対象レコードの指定
    • Tips:特定のカラムのレコードのみを削除したい場合
  • DELETE文利用時の注意点

プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。

スポンサーリンク

SQL:DELETE文

DELETE文はテーブルからレコードを削除する場合に利用します。

構文ルールは以下の通り非常にシンプルです。

DELETE FROM テーブル名;

以下のテーブル "PointList" に存在するレコードを削除してみます。

SQL DELETE
SELECT * FROM PointList;

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
|  2 | 鈴木 | A     |       90 |   70 |      70 |
|  3 | 高橋 | A     |       85 |   70 |      65 |
|  4 | 中村 | A     |       90 |   65 |      85 |
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |
+----+------+-------+----------+------+---------+
*/

シンプルなDELETE文ではレコードを削除したいテーブルを指定するだけなので、SQLは以下の通りとなります。

DELETE FROM PointList;

-- 結果 Empty set (0.00 sec)

ただし、通常このようなシンプルなDELETE文を使うことはありません。

普通、DELETE文を使うときは削除したいレコードが特定されていることが一般的です。上記のようなDELETE文を利用すると、テーブルに存在するすべてのレコードが一気に削除されてしまうため、基本的には次に紹介するようにWHERE句を利用する使用方法が一般的です。

次の章で、DELETE文におけるWHERE句の利用方法を解説します。

DELETE文:WHERE句

削除対象を制限するにはSELECT文と同様にWHERE句で条件を指定します。

DELETE FROM テーブル名
  WHERE 条件式;

先ほど例にしたテーブルから1行目のレコードだけを削除する場合を考えてみましょう。

delete where

WHERE句の記述方法はSELECT文と同様なので、1行目のレコードだけが一意になるような条件を指定します。

-- ID列が「1」のレコードのみを削除
DELETE FROM PointList 
  WHERE ID = 1;

/*1行目のレコードのみが削除される
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  2 | 鈴木 | A     |       90 |   70 |      70 |
|  3 | 高橋 | A     |       85 |   70 |      65 |
|  4 | 中村 | A     |       90 |   65 |      85 |
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |
+----+------+-------+----------+------+---------+
*/

このようにWHERE句で条件を指定してレコード削除を行うのが通常のDELETE文です。

もしSELECT文と同様に複数のレコードを削除したい場合は、以下のようにWHERE句の条件を変えればOK。

DELETE FROM Pointlist 
  WHERE Class = 'A';

/* 2行目~4行目のレコード(Class列がAのもの)が一度に削除される
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |
+----+------+-------+----------+------+---------+
*/

Tips:特定のカラム(列)だけデータを削除したい場合

DELETE文を使用して、特定のカラム(列)のデータだけを削除することはできません。ただし、以下のようにUPDATE文を使用して、特定のフィールドをNULLまたは空白に更新することができます。

UPDATE Pointlist
SET Japanese = NULL;

/* 結果→Japanese列がすべてNullに変換される
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |     NULL |  100 |      85 |
|  2 | 鈴木 | A     |     NULL |   70 |      70 |
|  3 | 高橋 | A     |     NULL |   70 |      65 |
|  4 | 中村 | A     |     NULL |   65 |      85 |
|  5 | 小林 | B     |     NULL |   90 |      65 |
|  6 | 山口 | B     |     NULL |   85 |      85 |
|  7 | 田中 | B     |     NULL |   90 |      65 |
|  8 | 伊藤 | B     |     NULL |   90 |      65 |
+----+------+-------+----------+------+---------+
*/

参考 UPDATE文

もし、特定のレコードのみを対象にしたい場合は、先ほどご説明したWHERE句を追加して条件を指定しましょう。

DROP TABLE との混同に注意

最後にSQL初心者が混同しがちな点について注意喚起です。DELETE文はレコードの削除を行うSQL文ですが、似たようなイメージを持つSQL文に "DROP TABLE文" があります。

参考 DROP TABLE

DELETE vs DROP TABLE
  • DELETE
    レコードの削除
  • DROP TABLE
    テーブルの削除

レコードのみを消したいはずなのに、誤ってテーブルごと削除してしまう。もしくは、テーブルを削除したいのに、DELETE文を実行する、などの混同が初心者のうちはよく起こりがち。

DELETE文を利用する場合、SQLにまだ慣れないうちはこの点要注意です。

--テーブル削除実行前
show tables;
/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| memberlist_b       |←削除対象
| pointlist          |
| subpointlist       |
+--------------------+
*/
-- テーブル削除実行
DROP TABLE memberlist_b;
SHOW TABLES;
/*
+--------------------+
| Tables_in_sampledb |
+--------------------+
| attendancehistory  |
| avg_pointlist      |
| classmember        |
| memberlist_a       |
| pointlist          |
| subpointlist       |
+--------------------+
*/
DELETE文のまとめ
  • DELETE文はテーブルからレコードを削除する場合に利用する
  • WHERE句で条件を指定しない場合テーブルにあるすべてのレコードが削除されるため注意が必要
-- ID列が「1」のレコードのみを削除
DELETE FROM PointList 
 where ID = 1;

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |←この行が削除
|  2 | 鈴木 | A     |       90 |   70 |      70 |
|  3 | 高橋 | A     |       85 |   70 |      65 |
|  4 | 中村 | A     |       90 |   65 |      85 |
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |
+----+------+-------+----------+------+---------+
*/

SQLを1から学習したい方は

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?

とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました