SQL DELETE文の使い方を徹底解説!行を削除する方法と注意点
SQLのDELETE文は、データベーステーブルから行(レコード)を削除するためのコマンドです。WHERE句を組み合わせることで、削除対象のレコードを細かく指定できます。逆にWHERE句を指定しない場合、テーブル内のすべての行が削除されてしまうため、取り扱いには十分な注意が必要です。
行の削除はSQLで非常によく使われる操作の一つです。たとえば、ユーザーがWebサイト上でアカウントを退会した場合、ユーザーデータベースからその人のデータを削除する必要がありますよね。
SQL DELETE文を使えば、テーブルから任意の行を削除できます。この記事では、データベースに対して「行の削除」を実行する方法を、基本から実例までわかりやすく解説します。
おさらい:SQLにおけるレコードとは
データベースは複数のテーブルで構成されており、それぞれのテーブルが独自のレコード(個別のエントリ)を保持しています。
たとえば、ある会社のデータベースには、従業員・仕入先・部署・給与などのテーブルが含まれているかもしれません。それぞれのテーブルには固有のレコードが格納され、たとえば給与テーブルには従業員への支払い履歴が一覧として記録されているでしょう。
テーブルに新しいレコードを追加するには、SQLのINSERT文を使用します。これにより、指定したカラムに特定の値を持つレコードを追加できます。
以下はINSERT文の実行例です。
INSERT INTO company_departments (name, department_id) VALUES ('Payroll', 5);
では、テーブルから行を削除したい場合はどうすればよいのでしょうか。その目的を達成するために使うのが、DELETE文です。
SQLでテーブルから行を削除する方法
DELETE文は、テーブルから1行または複数行を削除します。このステートメントは次の要素を受け取ります。
- テーブル名:DELETE文の対象となるテーブルを指定します(必須)。
- 条件(WHERE句):レコードを削除する前に満たすべき条件を指定します(任意)。
DELETE文の基本構文は以下のとおりです。
DELETE FROM table_name WHERE conditions_are_met;
重要なポイントとして、DELETE文には「元に戻す(アンドゥ)」コマンドが存在しません。一度データベースから削除されたレコードは、復元できません。
WHERE句を使うことで、どのレコードを削除するかを指定できます。この構文は、INSERTやUPDATEなど他のSQLコマンドで使用するWHERE句と同じものです。
なお、DELETE文が削除するのはテーブル内の「レコード」であり、テーブル自体は削除しません。テーブルごと削除したい場合はDROP TABLE文を使用します。
それでは、実際にDELETE文の使用例を見ていきましょう。
条件を指定して行を削除する例
特定の条件に一致するレコードだけを削除したい場合は、WHERE句を指定します。ここでは、「Marketing(マーケティング)部門をSales(営業)部門に統合する」ことになったシナリオを想定します。
現在、テーブルには以下のレコードが格納されています。
| name | title | department_id |
| John | Marketing | 2 |
| Rebecca | Sales | 3 |
DELETEクエリを使って、リストからMarketing部門を削除してみましょう。
DELETE FROM company_departments WHERE title = 'Marketing';
SQLのSELECT文でレコードが正しく削除されたか確認できます。実行結果は以下のとおりです。
| name | title | department_id |
| Rebecca | Sales | 3 |
Rebeccaのレコードは影響を受けていません。これは、削除対象を「titleが'Marketing'であるレコード」だけに限定したためです。一方、Johnのレコードは消えています。Johnはマーケティング部門に所属していたからです。
この例では1件のレコードを削除しましたが、もしマーケティング部門に多数の従業員がいた場合、それら全員のレコードも同時に削除されます。WHERE句の条件に一致するすべての行が対象になる点に注意しましょう。
テーブル内の全行を削除する例
今度は、会社の組織再編に伴って、company_departmentsテーブルの全レコードを削除したいケースを考えてみます。その場合、次のようなコマンドを実行します。
DELETE FROM company_departments;
このクエリは、company_departmentsテーブル内のすべての行を削除します。WHERE句による条件を指定していないためです。DELETE文でWHERE句を省略すると、テーブル内の全行が削除されるということを、必ず覚えておきましょう。
削除後、company_departmentsテーブルに対して「titleがMarketingである従業員」を検索しても、レコードは一件も見つかりません。
| name | title | department_id |
(0件)
補足:TRUNCATEとの違い
テーブル内の全行を削除する場合、TRUNCATE TABLE文を使う方法もあります。TRUNCATEはDELETEよりも高速で、トランザクションログの負荷も小さいのが特徴です。ただし、WHERE句による条件指定ができない点や、RDBMSによって挙動が異なる点には注意が必要です。全件削除か条件付き削除かによって、適切なコマンドを選びましょう。
まとめ
SQLのDELETE文は、データベースから行を削除するためのステートメントです。WHERE句を指定しない場合はすべての行が削除されるため、WHERE句を使って削除対象のレコードを制御することが重要です。
この記事では、まずSQLにおけるレコードの基本的な仕組みをおさらいしました。そのうえで、DELETE文を使ってテーブルから行を削除する方法、条件を指定して特定のレコードだけを削除する方法、そしてテーブル内の全データを削除する方法について解説しました。
DELETE操作は元に戻せないため、本番環境で実行する前には必ずSELECT文で削除対象を確認し、可能であればトランザクションやバックアップを活用することをおすすめします。
さらにSQLを学びたい方は、学習リソースやオンライン講座をまとめた「SQLの学び方ガイド」もぜひ参考にしてください。
-
MySQLテーブルから特定の行を削除する方法【DELETE文の使い方】
MySQLのテーブルから行を削除したい場合、DELETE文とWHERE句を組み合わせて使用します。WHERE句で削除対象の行を特定することで、テーブル内の他のデータに影響を与えることなく、目的の1行だけを正確に削除できます。基本的な構文DELETE FROM テーブル名 WHERE 削除対象の行を特定する条件;実行例ここでは、以下のような「names」テーブルを例に説明します。まず、現在のテーブルの中身を確認してみましょう。mysql> Select * from names; +------+-----------+ | id | name | +------+-----
-
MySQLで行を削除する方法|DELETE文の基本と実行例を解説
MySQLでテーブルから特定の行(レコード)を削除するには、DELETE文を使用します。この記事では、実際にサンプルテーブルを作成し、DELETE文を使って行を削除する手順を順番に解説します。1. サンプルテーブルの作成まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> CustomerName varchar(100), -> Cus