\ ポイント最大11倍! /

【SQL】DELETE でレコードを削除しよう!

  • DELETE 文の使い方を知りたい!

このような方に向けて書きました。

本記事ではDELETEの基礎と、実際のクエリを実例としてご紹介します。

DELETE の基本

DELETEは、テーブルから特定のレコードを削除します。

DELETE FROM table_name
WHERE condition;

各要素の内容は以下の通りです。

効果
table_name削除対象のテーブル名
WHERE condition削除する行の条件を指定
句と効果

UPDATEと同様、DELETEでもWHEREを指定しないと全削除になってしまうのでご注意ください。

DELETE の具体例

具体的なクエリ例を示しつつ、DELETEの使い方を確認してきましょう。

特定の行を削除

特定の行を削除する場合には、以下のクエリを実行します。

DELETE FROM employees
WHERE employee_id = 1;

上記ではemployee_id1のレコードを削除します。

ただしDELETEは一度実行すると元に戻せないので、以下のコマンドで削除予定のレコードを確認しておくことをお勧めします。

SELECT *
FROM employees
WHERE employee_id = 1;
クエリ実行例

employeesテーブルが次のようなものだったとします。

employee_idnamepositiondepartment
1John DoeManagerSales
2Jane SmithDeveloperIT
3Emily DavisAnalystMarketing
クエリ実行前

クエリ実行後のテーブルは以下になります。

employee_idnamepositiondepartment
2Jane SmithDeveloperIT
3Emily DavisAnalystMarketing

employee_id1 のレコードが削除され、 23のレコードのみが残ります。

複数の条件を指定して削除

複数条件を指定する場合には、AND演算子を使います。

DELETE FROM employees
WHERE department = 'Sales' AND salary < 30000;

今回もDELETEクエリを使っているので、削除実行前にあらかじめ削除対象のレコードを確認しておくべきです。

SELECT * FROM employees
WHERE department = 'Sales' AND salary < 30000;

出力結果が正しければ、先ほどのDELETEクエリを実行しましょう。

クエリ実行例

employeesテーブルが次のようなものだったとします。

employee_idnamepositiondepartmentsalary
1John DoeManagerSales50000
2Jane SmithDeveloperIT40000
3Emily DavisAnalystMarketing35000
4Chris BrownSales RepSales25000
5Pat TaylorSales RepSales28000
クエリ実行前

クエリ実行後のテーブルは以下になります。

employee_idnamepositiondepartmentsalary
1John DoeManagerSales50000
2Jane SmithDeveloperIT40000
3Emily DavisAnalystMarketing35000
クエリ実行後

departmentSalessalary30000未満のレコードが2つ存在していましたが、クエリの実行でこれらが削除されました。

全行を削除する場合

WHERE句を指定しなければ、全行削除になります。

DELETE FROM employees;

こちらの操作は慎重に行なってください。

トランザクションを使った安全な削除方法

トランザクションを使うと、操作が失敗した場合には変更前に戻せます。

手順としては、以下の通りです。

  1. トランザクションを開始
  2. 削除前の状態を確認
  3. 削除クエリを実行
  4. 削除後の状態を確認
  5. 問題がなければ、トランザクションをコミット
  6. 問題があれば、トランザクションをロールバック

トランザクションを使うことで、エラーが発生しても元に戻せます。

トランザクションを開始

以下のコマンドでトランザクションを開始します。

BEGIN;

削除前の状態を確認

削除予定のレコードを取得します。

SELECT *
FROM employees
WHERE department = 'Sales' AND salary < 30000;

返ってきた結果が削除したいものかをよく確認しましょう。

削除クエリの実行

先ほどのSELECTで指定した条件で、DELETEを行います。

DELETE FROM employees
WHERE department = 'Sales' AND salary < 30000;

削除後の状態を確認

全レコードを取得して、変更後のテーブルを確認します。

SELECT *
FROM employees;

問題なければ、トランザクションをコミット

正常に削除ができていれば、以下のコマンドを実行しましょう。

COMMIT;

問題があれば、トランザクションをロールバック

何か問題があった場合には、ロールバックで元に戻します。

ROLLBACK;

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

karo@プログラマのアバター karo@プログラマ プログラマ

「書くことで人の役にたつ」をモットーに活動中。
本職はプログラマで、Python(Django)が得意。最近ではフロント側の技術に触れる機会も増えてきました。
基本情報技術者試験合格。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)