SQL

最終更新日: 2024.01.17 (公開: 2024.01.16)

SQLからDELETE文でデータを削除するには?基本的な使い方を解説

SQLからDELETE文でデータを削除するには?基本的な使い方を解説

SQLのDELETE文とは、SQLの特定のテーブル(データのまとまり)から指定された条件に一致するデータを削除する際に用いる文です。つまり、「レコードの削除を行う命令」という意味があります。

本記事では、SQLのDELETE文の意味や使い方、安全に使用するために注意すべきことを解説します。

SQLのDELETE文とは?

データベース言語のひとつであるSQLには、SELECT文やUPDATE文など、データベースの操作や定義を行うためのさまざまな文が備わっています。DELETE文はSQL文のひとつで、条件で指定したテーブルから条件に一致するデータを削除する際に使用される文です。

DELETE文は、データベースの管理において必要不可欠な文ですが、操作を誤るとデータを損失させる危険性のある文でもあります。適切に条件をつけて実行することで、安全で多彩な活用が可能です。

そもそもSQLとは?

SQLとは「Structured Query Language」の略で、データベース内のデータを操作するための言語です。データベースとはデータが入っている箱のようなもので、定められたデータ構造で整理・整列したデータの集まりを指します。

またSQLは、国際標準化機構で規格が決まっているデータベース言語の中でも最も普及している言語です。SQLを覚えると、ほとんどのリレーショナルデータベースでも同じように使用でき、他のプログラミング言語との互換性も高い特徴があります。

SQLのDELETE文で行(レコード)を消す方法

SQLのDELETE文で行(レコード)を消す方法は、以下の場合で分かれます。

  • DELETE文の対象が全レコードの場合
  • DELETE対象を限定したい(WHEREコマンド)場合
  • DELETE対象を限定したい(ORDER BYコマンド)場合

ここからは、それぞれの方法を解説します。

DELETE文の対象が全レコードの場合

DELETE文の対象が全レコードの場合は、以下のようにコマンド入力します。

DELETE FROM [テーブル名];

DELETE FROMを記述した後に、削除対象のテーブル名を記述するだけのシンプルなコマンドです。しかし、テーブル内にあるすべてのデータを削除する状況は、あまり発生しません。DELETEする対象を限定して指定する方法が一般的です。
また、他のテーブル内にあるすべてのデータを削除するコマンドとして、TRUNCATE文もあります。

DELETE対象を限定したい(WHEREコマンド)場合

DELETE対象をWHEREコマンドを使って限定したい場合は、以下のコマンドを入力します。

DELETE FROM [テーブル名] WHERE [条件文];

WHERE句のあとに条件文をつけることで、条件を満たしたテーブル内のデータのみ削除が可能です。例として、「table1」というテーブルからidが1のデータのみを削除したい場合は、以下のようにコマンドを入力し実行します。

DELETE FROM table1 WHERE id = 1; 

DELETE対象を限定したい(ORDER BYコマンド)場合

DELETE文は、ORDER BYと合わせて使用できます。

ORDER BYとは、SQLで選定したデータを並び替えできるコマンドです。DELETE文と合わせて使用することによってデータの上位・下位を指定した削除が可能になります。

テーブル「table1」内の、idが10以降のデータを削除するには、以下のようにコマンドを入力し、実行します。

DELETE FROM table1 WHERE 10 < id ORDER BY id;

また、DESCとLIMITを用いることで、idの末尾5件文のデータを指定し削除する使い方も可能です。

DELETE FROM table1 ORDER BY id DESC LIMIT 5;

SQLのDELETE文の応用的な使い方

SQLのDELETE文には、さまざまな応用的な使い方があります。

  • DELETEにサブクエリを適用しよう
  • JOIN文を使って複数テーブルを削除する方法
  • 全件削除する場合はTRUNCATE文も使える
  • NULLの判定ではIS NULL演算子を使おう

ここからは、これらの方法について解説します。

DELETEにサブクエリを適用しよう

DELETE文は、サブクエリを適用させて使用できます。

サブクエリとは、SQLの中に埋め込まれる、別のSQLです。サブクエリを使用することで、複数のSQL文をひとつにまとめて記述することが可能で、より複雑な条件でデータを削除できます。

サブクエリを適用したDELETE文の例が、以下の通りです。

DELETE FROM table1
WHERE name NOT IN (SELECT name FROM table2);

上記の例では、table1テーブルのname列とtable2テーブルのname列を比較して、table2のname列と一致しないtable1のname列のあるレコードのみが削除されます。

JOIN文を使って複数テーブルを削除する方法

DELETE文は、JOIN文を使うこともできます。
JOINとは複数のテーブルを結合できる句で、使用することにより同じデータベース内の異なるテーブルを一括で操作することが可能です。

table1, table2,table3の三つのテーブルでidが共通するデータのみを、table1テーブルから削除するコマンドの例は以下の通りです。

DELETE table1 FROM table1
INNER JOIN table2 ON table1.id = table2.id
INNER JOIN table3 ON table2.id = table3.id;

全件削除する場合はTRUNCATE文も使える

TRUNCATE文を使うことで、テーブル内の全データを削除可能です。

TRUNCATE文の記述例は、以下の通りです。

TRUNCATE TABLE [テーブル名];

DELETE文はWHEREの使用を条件付けできますが、TRUNCATE文では条件の指定ができません。ただし、TRUNCATE文を使用することでデータの削除スピードが高速になるメリットがあります。

NULLの判定ではIS NULL演算子を使おう

SQLでは条件文の使用が可能ですが、条件文の「=」でNULLを判定できません。そのため、NULLを判定する際にはIS NULL演算子を使用します。

例として、table1テーブルからname列の値がNULLのレコードのみを削除するには、以下のようなコマンドを入力します。

DELETE FROM table1 WHERE name IS NULL;

IS NOT NULLという演算子もあり、使用することでNULL以外の値を判定することが可能です。

SQLのDELETE文で安全にデータを削除する方法

SQLのDELETE文で安全にデータを削除する方法は、主に以下の4つです。

  • SELECT文と組み合わせてDELETE文を使おう
  • 確実性の高い条件をつけて削除しよう
  • LIMITをつけて削除しよう
  • SQLのDELETE文は注意して扱おう

ここからはDELETE文で安全にデータを削除する方法について、セクションに分けて解説します。

SELECT文と組み合わせてDELETE文を使おう

SELECT文と組み合わせて使用することにより、DELETE文で安全なデータの削除が可能です。

はじめにDELETE文と同じ条件でSELECT文を作成し、出力された結果が正しいことを確認してからDELETE文を実行することで、誤ったデータの削除を未然に防げます。

SELECT * FROM table1 WHERE id >= 10;
DELETE FROM table1 WHERE id >= 10;

シンプルな対策なので、飛ばしてしまう恐れもあるため必ず確認しましょう。

確実性の高い条件をつけて削除しよう

確実性の高い条件をつけて削除することは、DELETE文で安全にデータを削除する方法のひとつです。

SQL文中に複数の判定を合わせ、より詳細な条件を指定することで、誤ったデータ削除のリスクをさらに下げられます。

たとえば、以下のようなコマンドがあったとします。

DELETE FROM table1 WHERE id = 10;

これでもidが10のレコードを問題なく削除できますが、以下のように複数の判定を組み込む癖をつけておくとよいでしょう。

DELETE FROM table1 WHERE id = 10 AND name = "Tom";

複数の条件を指定することで誤ってデータを削除するリスクは低くなりますが、条件の正確さが必要です。条件が誤っていると、意図しないデータが削除される可能性もあるでしょう。複数の条件を使用する場合でも、その条件が正確なことを確認するステップは省略できないと認識してください。

LIMITをつけて削除しよう

LIMITをつけて削除することは、DELETE文で安全にデータを削除する方法のひとつです。
LIMIT句とは、SQL文の結果から特定の数の行を取得する際に使用する句です。SELECTなどでよく使われますが、DELETEと合わせて使うことで誤ってデータを削除するリスクを下げられます。

例として、以下のようなコマンドがあったとします。

DELETE FROM table1 WHERE id = 10;

idがユニークな連番の場合、ひとつのデータのみを削除するコマンドになりますが、そのような場合は以下のようにLIMIT句を追加しましょう。

DELETE FROM table1 WHERE id = 10 LIMIT 1;

最後にLIMIT 1を追加したことで、条件式に実は誤りがあったなどのトラブルの際にも削除されるレコードを最小限に抑えられます。ただし、使用するDBMSとその設定によっては、この方法が適用できない場合もあります。事前のテストや確認が必要です。

SQLのDELETE文は注意して扱おう

DELETE文を使用することでテーブルからデータを削除でき、WHEREやORDER BY・サブクエリなどを利用することにより、さまざまな条件をつけたデータの削除も可能です。

使い方を誤るとデータを損失させてしまうリスクはありますが、SELECT文との組み合わせやLIMIT句の使用によって、安全なデータの削除が可能です。DELETE文は、データベースの管理において必要不可欠な文といえます。DELETE文を注意して扱うことを十分に認識し、安全にデータの管理を行っていきましょう。

アクセスランキング 人気のある記事をピックアップ!

    コードカキタイがオススメする記事!

    1. 子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      2024.06.17

      子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      #プログラミングスクール

    2. 【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      2022.01.06

      【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      #プログラミングスクール

    3. 【未経験でも転職可】30代におすすめプログラミングスクール8選!

      2024.01.26

      【未経験でも転職可】30代におすすめプログラミングスクール8選!

      #プログラミングスクール

    4. 初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      2024.01.26

      初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      #JAVA

    5. 忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      2024.01.26

      忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      #プログラミングスクール

    1. 【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      2022.01.06

      【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      #プログラミングスクール

    2. 【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      2024.01.26

      【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      #プログラミングスクール

    3. 【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    4. 【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    5. 【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      2024.01.26

      【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      #プログラミングスクール