2025年11月18日火曜日

SQL Server DELETE文の基本構文と使い方|削除処理の基本と安全な実行方法

データを削除したいときは?SQL Server DELETE文の基本と安全な実行方法を解説

SQL Serverで不要になったデータを削除するにはDELETE文を使います。
しかし、条件を誤ると全件削除や重要データの消失といった取り返しのつかないミスにつながります。
本記事では、DELETE文の基本構文から実務での安全な使い方、トランザクションを活用した誤削除防止のテクニックまでを初心者にもわかりやすく解説します。

目次

DELETE文の基本構文

基本形

DELETE文は、テーブルから指定した行を削除するための命令です。
基本構文は以下のように書きます。


DELETE FROM テーブル名
WHERE 条件;

例えば、顧客IDが100のデータを削除する場合:


DELETE FROM Customers
WHERE CustomerID = 100;

このようにWHERE句で削除対象を明確に指定します。

WHERE句を省略すると全件削除になる

DELETE文でWHERE句を省略すると、テーブル内のすべてのデータが削除されます。


DELETE FROM Customers;  -- 全件削除される!

テーブル構造自体は残りますが、データはすべて消えるため非常に危険です。
実務では、必ずWHERE句を指定するのが鉄則です。

WHERE句を使った条件付き削除

単一条件の削除

WHERE句を使えば、削除する行を特定できます。


DELETE FROM Orders
WHERE OrderDate < '2024-01-01';

この例では、2024年より前の注文データを削除します。

複数条件の削除

ANDやORを使って条件を組み合わせることも可能です。


DELETE FROM Customers
WHERE City = '東京'
  AND Rank = 'SILVER';

条件を複雑にするほど誤削除のリスクも高まるため、実行前には必ずSELECTで確認しましょう。

JOINを使った削除

他のテーブルを参照して削除する

SQL Serverでは、JOINを使って他テーブルの情報をもとに削除することも可能です。


DELETE C
FROM Customers AS C
INNER JOIN Orders AS O
  ON C.CustomerID = O.CustomerID
WHERE O.Status = 'キャンセル';

この例では、キャンセルされた注文を持つ顧客データを削除します。
JOINを使うと柔軟な削除ができますが、条件を誤ると大量削除の危険があるため慎重に扱いましょう。

実務で安全に削除するためのポイント

1. まずSELECTで対象を確認する

DELETE文を実行する前に、必ず同じWHERE条件でSELECTを実行して対象件数を確認します。


SELECT * FROM Orders WHERE Status = 'キャンセル';
DELETE FROM Orders WHERE Status = 'キャンセル';

この2段階実行を徹底すれば、誤削除を防げます。

2. トランザクションを活用する

DELETE処理をトランザクションで囲むことで、万が一のときにROLLBACKで元に戻せます。


BEGIN TRANSACTION
DELETE FROM Customers WHERE City = '大阪';
ROLLBACK TRANSACTION;  -- 間違っていた場合、元に戻せる
COMMIT TRANSACTION;   -- 問題なければ確定

削除前に「件数を確認 → COMMIT」で安全に運用できます。

3. 論理削除(フラグ管理)を検討する

履歴を残したい場合や削除後の復元が必要な場合は、物理削除ではなく論理削除(削除フラグを立てる方法)が有効です。


UPDATE Customers
SET IsDeleted = 1
WHERE CustomerID = 100;

システム設計段階で論理削除を採用しておくと、安全で柔軟なデータ管理が可能です。

DELETEとTRUNCATEの違い

TRUNCATE TABLEの特徴

TRUNCATE TABLE は、テーブル内のすべての行を一括削除するコマンドです。
DELETEより高速ですが、WHERE句を指定できず、細かい制御ができません。


TRUNCATE TABLE Customers;

DELETEとの違いをまとめると次の通りです。

項目 DELETE TRUNCATE
削除単位 条件指定で一部削除可 全件削除のみ
ログ記録 削除行ごとにログ出力 最小限のログ
速度 やや遅い(安全) 高速(復元不可)
トリガー発火 あり なし

安全性を重視するならDELETE、パフォーマンスを重視する一時テーブルならTRUNCATEを使うのが一般的です。

まとめと次のステップ

学んだ内容の整理

  • DELETE文はテーブルの行を削除する命令。
  • WHERE句を必ず指定し、対象を絞り込む。
  • 実行前にSELECTで確認し、必要に応じてトランザクションを活用。
  • TRUNCATEは高速だが条件指定不可・復元不可。
  • 履歴管理が必要なら論理削除を検討。

参考リンク

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿