(最終更新月:2022年12月)
✔このような方へ向けて書かれた記事となります
「SQLのDELETE文を書けるようになりたい」
「DELETE文でできることってどんなことがあるのだろうか」
「SQL言語をマスターしたい!」
✔当記事を通じてお伝えすること
- SQL言語でのDELETE文の基本構成
- DELETE文の応用
- SQL言語がWEB上で実行できる無料ツール
当記事では、DELETE文の基本はもちろん、さまざまな使い方を実例付きで解説しています。
ぜひ最後までご覧ください。
✓当記事の信頼性
当記事では、Python言語をベースとしたDjangoフレームワークで、アプリの公開方法をご紹介しています。
データの保存場所は、サーバー内で動くpostgreSQL(ポスグレ)です。
Djangoを使えばSQLをマスターしておく必要はないものの、最低限の知識として、かなり勉強しました。
実際のコードや写真付きで、できる限り丁寧に解説します。
※Djangoのチュートリアルはこちら。
SQL言語におけるDELETE文の基本事項3選
SQL言語におけるDELETE文の基本事項を確認していきましょう。
いろいろな使い方がありますので、基本を理解してなければ扱いが難しい可能性があります。
- DELETE文とは
- DELETE文の基本構成
- DELETE文で特定のレコードのみ削除する
DELETE文とは
DELETE文とは、SQL言語を使って、データベース内のレコードを削除するものです。
すべてのレコードを消したり、特定のレコードを消したりできるコマンドになります。
DELETE文の基本構成
DELETE文の基本的な構成を以下の2パターンで見ていきます。
具体的なコードは、次章以降で見ていきます。
- DELETEで全件削除する
- DELETEで条件を指定する
DELETEで全件削除する
DELETEで全件削除する方法は以下のとおり。
DELETE FROM テーブル名;
DELETEで条件を指定する
DELETEで特定のレコードを消去するには、条件を指定します。
DELETE FROM テーブル名 条件
条件はテーブル名のあとに入れてください。
DELETE文で特定のレコードのみ削除する
DELETE文で条件をつける方法を詳しく見ていきましょう。
主に以下の2通りあります。
- WHEREを使ってDELETE
- WHERE…LIKEを使ってDELETE
使うデータベーステーブル「players_2022」は以下のとおり。
id | name | score |
---|---|---|
1 | エンバペ | 8 |
2 | メッシ | 7 |
3 | ジルー | 4 |
4 | アルバレス | 4 |
5 | バレンシア | 3 |
6 | ガクポ | 3 |
7 | 西藤 | 1 |
WHEREを使ってDELETE
WHEREを使ってDELETE文を作ってみます。
WHEREによりカラム内の値が条件に当てはまるものが見つけられます。
DELETE FROM players_2022 WHERE id=7;
id | name | score |
---|---|---|
1 | エンバペ | 8 |
2 | メッシ | 7 |
3 | ジルー | 4 |
4 | アルバレス | 4 |
5 | バレンシア | 3 |
6 | ガクポ | 3 |
idが7のレコードが削除されました。
idでなく、nameなどのカラムでも消去できます。
DELETE FROM players_2022 WHERE name='西藤';
WHERE…LIKEを使ってDELETE
LIKEを使ったDELETE文の例をご覧いただきます。
=よりも、幅広く条件を設定できる特徴があります。
DELETE FROM players_2022 WHERE name LIKE '西藤%';
西藤で始まるものがすべて削除できます。
DELETE文で複数のレコードを削除
DELETE文で複数のレコードを削除していきましょう。
WHEREやLIKEを使ってもできますが、以下の方法も便利です。
- ORDER BYを使ってDELETE
- LIMITを使ってDELETE
ORDER BYを使ってDELETE
ORDER BYを使ってデータを並び替えた上で、DELETEをおこなう方法です。
SELECTと組み合わせて使い、数量で条件をつけたいときなどに使えます。
DELETE FROM players_2022 WHERE score in (SELECT score FROM players_2022 WHERE 4 > score ORDER BY score);
id | name | score |
---|---|---|
1 | エンバペ | 8 |
2 | メッシ | 7 |
3 | ジルー | 4 |
4 | アルバレス | 4 |
scoreが4未満のレコードを削除しました。
LIMITを使ってDELETE
LIMITを使って、対象のレコード数を限定できます。
方法は以下のとおり。
DELETE FROM players_2022 WHERE score in (SELECT score FROM players_2022 ORDER BY score LIMIT 3);
id | name | score |
---|---|---|
5 | バレンシア | 3 |
6 | ガクポ | 3 |
7 | 西藤 | 1 |
scoreで見たときの上位3つを削除しました。
SQL言語のDELETEで知っておきたい応用編3選
SQL言語でのDELETE文を応用した使い方をご覧ください。
使えるようになると便利です。
- 副問合せ:SELECTを含むDELETE文の書き方
- JOINを使って複数テーブルを同時に削除する書き方
- DELETEの代わりにTRUNCATEを使う書き方
副問合せ:SELECTを含むDELETE文の書き方
DELETE文の中にSELECT文を含められます。
以下のように記述します。
DELETE FROM players_2022 WHERE score in
(SELECT score FROM players_2022
WHERE score < (SELECT AVG(score) FROM players_2022)
);
平均点以下のプレイヤーを削除しました。
JOINを使って複数テーブルを同時に削除する書き方
JOINを使って別テーブルを参照しつつ、削除していきます。
別テーブル「players_all_tiome」はこちら。
id | name | score |
---|---|---|
1 | クローゼ | 16 |
2 | ロナウド | 15 |
3 | ミュラー | 14 |
4 | フォンテーヌ | 13 |
5 | 西藤 | 3 |
別テーブルと名前が重複しているレコードを削除します。
DELETE FROM players_2022 WHERE id in (SELECT players_2022.id FROM players_2022 INNER JOIN players_all_time ON players_2022.name = players_all_time.name);
id | name | score |
---|---|---|
1 | エンバペ | 8 |
2 | メッシ | 7 |
3 | ジルー | 4 |
4 | アルバレス | 4 |
5 | バレンシア | 3 |
6 | ガクポ | 3 |
DELETEの代わりにTRUNCATEを使う書き方:違いを解説
全件を削除するなら、TRUNCATEも使えます。
DELETEとの違いは以下のとおり。
- DELETEでおこなわれる処理がないので、軽い
- DELETEでは戻せるデータもTRUNCATEでは戻せない
TRUNCATE テーブル名;
TRUNCATE players_all_time;
SQLでDELETE文を使う際に気を付けること
SQLでDELETE文を使う際に気を付けるべきことをお伝えします。
データを削除するDELETE文は、一歩間違えると取り返しのつかないことになってしまうからです。
- 条件設定を慎重におこなう
- DELETEがすべてではない
- 回数を指定できるLIMITを活用する
条件設定を慎重におこなう
DELETE文を使う際は、条件の設定を慎重におこないましょう。
なぜなら条件を間違えると、意図しないデータまで消えてしまうからです。
SELECT文を活用して、条件を事前にチェックすることを心がけてください。
DELETEがすべてではない
データが不要になったからといって、DELETEすることがすべてではありません。
今は必要のないデータも、考えや目的が変更されれば、必要になる場合もあります。
DELETEせずに、表示・非表示のためのカラムを設けて、TrueやFalseで管理できます。
どの方法が良いかは先々のことまで考えて設計しましょう。
回数を指定できるLIMITを活用する
回数を指定するLIMITを使うのもおすすめです。
処理の回数を指定すれば、想定しないデータ削除を回避できる可能性が上がります。
LIMIT文を上手く組み合わせて使ってみましょう。
SQL学習のための無料ツール:SQL Fiddle
当記事で共有している写真も、SQL Fiddleを使ってご説明しました。
特徴は以下のとおり。
- SQL言語がブラウザ打てて、実行できる
- 完全無料
- 登録不要
以下のように、左側でテーブルやカラムの設定をおこない、右側でコードが実行できるのです。
SQL言語を学ぶなら、登録してくことをおすすめします!
ちなみに今回のデータベース設定として、SQL Fiddleの左側に書いたコードはこちら。
CREATE TABLE players_2022(
id SERIAL primary key,
name varchar(50),
score integer
);
CREATE TABLE players_all_time(
id SERIAL primary key,
name varchar(50),
score integer
);
INSERT INTO players_2022 (name, score) VALUES ('エンバペ', 8);
INSERT INTO players_2022 (name, score) VALUES ('メッシ', 7);
INSERT INTO players_2022 (name, score) VALUES ('ジルー', 4);
INSERT INTO players_2022 (name, score) VALUES ('アルバレス', 4);
INSERT INTO players_2022 (name, score) VALUES ('バレンシア', 3);
INSERT INTO players_2022 (name, score) VALUES ('ガクポ', 3);
INSERT INTO players_2022 (name, score) VALUES ('西藤', 1);
INSERT INTO players_all_time (name, score) VALUES ('クローゼ', 16);
INSERT INTO players_all_time (name, score) VALUES ('ロナウド', 15);
INSERT INTO players_all_time (name, score) VALUES ('ミュラー', 14);
INSERT INTO players_all_time (name, score) VALUES ('フォンテーヌ', 13);
INSERT INTO players_all_time (name, score) VALUES ('西藤', 3);
コピーして活用してください。
まとめ:SQLのDELETEでは条件設定に気をつけよう
当記事の内容をまとめます。
- DELETE文はデータベース内のレコードを削除するためのもの
- DELETE文では、SELECTやJOINと組み合わせられる
- DELETEの際の条件は慎重に設定しよう
SQL言語において、データの削除は必ず必要な機能です。
ただ、曖昧なまま実行してしまうと、貴重なデータの損失に繋がります。
必ずSELECT文で試してからおこなうようにしてください。