【SQL入門】DELETEの基本を実例付で解説|使える無料ツールも

SQL

(最終更新月: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」は以下のとおり。

idnamescore
1エンバペ8
2メッシ7
3ジルー4
4アルバレス4
5バレンシア3
6ガクポ3
7西藤1
2022年ワールドカップ得点ランキング

WHEREを使ってDELETE

WHEREを使ってDELETE文を作ってみます。

WHEREによりカラム内の値が条件に当てはまるものが見つけられます。

DELETE FROM players_2022 WHERE id=7;
idnamescore
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);
idnamescore
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);
idnamescore
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」はこちら。

idnamescore
1クローゼ16
2ロナウド15
3ミュラー14
4フォンテーヌ13
5西藤3
players_all_timeテーブル

別テーブルと名前が重複しているレコードを削除します。

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);
idnamescore
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文で試してからおこなうようにしてください。

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCへ投げ銭をする

タイトルとURLをコピーしました