SQLのDELETE文を完全ガイド!初心者でもわかるデータ削除方法
新人
「データベースの不要な情報を削除するにはどうしたらいいですか?」
先輩
「データを削除するには、SQLのDELETE文を使うよ。」
新人
「DELETE文って何ですか?」
先輩
「DELETE文を使うと、データベースのテーブルから不要なデータを削除できるんだ。まずは、使用するテーブルを確認してみよう!」
1. 今回使用するテーブルデータ
今回のSQLの解説では、社員情報を管理するemployeeテーブルを使用します。このテーブルには、社員のid、name、age、department、salaryの情報が格納されています。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
2. DELETE文の基本
SQLのDELETE文を使うと、特定のデータを削除することができます。基本の構文は次のようになります。
DELETE FROM employee
WHERE id = 5;
このSQL文は、employeeテーブルのidが5の社員のデータを削除します。
このSQLを実行すると、データが削除され、テーブルの内容は以下のようになります。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
このように、DELETE文を使うことで、不要なデータを簡単に削除できます。
3. WHERE句を使った特定のデータ削除
DELETE文では、WHERE句を使うことで、特定の条件に一致するデータのみを削除することができます。
DELETE FROM employee
WHERE department = '営業';
このSQL文を実行すると、営業部の社員のデータがすべて削除されます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
このように、WHERE句を使うことで、削除するデータを限定することができます。
4. 複数の条件を指定して削除する方法
DELETE文では、WHERE句を組み合わせることで、複数の条件に合致するデータのみを削除できます。
DELETE FROM employee
WHERE department = '開発' AND age > 30;
このSQLを実行すると、開発部門のうち、30歳以上の社員のデータだけが削除されます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
このように、複数の条件を指定することで、削除対象のデータを細かく指定できます。
5. DELETEとTRUNCATEの違い
SQLにはDELETE文のほかに、TRUNCATE文を使ってテーブルのデータを削除する方法があります。両者の違いを比較してみましょう。
| 操作 | DELETE | TRUNCATE |
|---|---|---|
| 削除対象 | 指定した行のみ | テーブル内の全データ |
| WHERE句 | 使用可能 | 使用不可 |
| 削除速度 | 遅い(1行ずつ削除) | 速い(全行一括削除) |
| ROLLBACK(元に戻せるか) | 可能 | 不可 |
テーブルのすべてのデータを削除する場合は、TRUNCATEを使用することで処理を高速化できます。
TRUNCATE TABLE employee;
このSQLを実行すると、employeeテーブルのデータがすべて削除されますが、DELETEとは異なり、元に戻すことはできません。
このように、用途に応じてDELETEとTRUNCATEを使い分けることが重要です。
6. よくあるエラーと対策
SQLのDELETE文を使用する際に、初心者がよく遭遇するエラーとその対策を紹介します。
1. WHERE句を指定せずに全データを削除してしまう
間違えてWHERE句を指定せずに実行すると、テーブル内のすべてのデータが削除されてしまいます。
DELETE FROM employee;
エラー内容: 全データが削除されてしまう。
対策: 必ずWHERE句を指定し、対象のデータのみ削除する。
DELETE FROM employee WHERE id = 3;
2. 存在しないカラム名を指定
誤ったカラム名を指定するとエラーになります。
DELETE FROM employee WHERE employe_id = 3;
エラー内容: ERROR: Unknown column 'employe_id' in 'where clause'
対策: 正しいカラム名を使用する。
DELETE FROM employee WHERE id = 3;
7. DELETEとJOINを組み合わせた削除
特定の条件に一致するデータを別のテーブルと紐づけて削除する場合、JOINを活用することができます。
例えば、salary_updateというテーブルがあり、給与改定により削除が決定された社員が登録されているとします。
| id | delete_flag |
|---|---|
| 2 | 1 |
| 4 | 1 |
このsalary_updateテーブルをもとに、該当する社員データを削除する場合は、以下のSQLを実行します。
DELETE e FROM employee e
JOIN salary_update s ON e.id = s.id
WHERE s.delete_flag = 1;
このSQLを実行すると、該当する社員データが削除されます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
このように、JOINを使うと、別のテーブルのデータに基づいて削除が可能になります。
8. サブクエリを利用したDELETE
サブクエリ(入れ子のSQL)を使用すると、特定の条件に一致するデータを別のテーブルから取得して削除できます。
例えば、給与が平均以下の社員を削除する場合、以下のようなSQLを使用します。
DELETE FROM employee
WHERE salary < (SELECT AVG(salary) FROM employee);
このSQLを実行すると、給与が平均以下の社員が削除されます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
このように、サブクエリを利用すると、複雑な条件を満たすデータを削除することができます。