SQL Serverでデータベースを操作する際、不要なデータを削除するために使うのがDELETE文です。
DELETE文は、特定の条件に合致するデータや、テーブル全体のレコードを削除するための重要なSQLコマンドです。
この記事では、DELETE文の基本的な使い方から注意点、そして実践的な演習問題までを順に紹介します。
DELETE文の基本構文
DELETE
文の基本的な構文は以下の通りです:
DELETE FROM テーブル名
WHERE 条件;
各要素の説明
- DELETE FROM:削除する対象のテーブルを指定します。
- WHERE:削除するレコードを絞り込む条件を指定します。
WHERE
がない場合、すべてのレコードが削除されるので要注意です。
DELETE文の具体例
では、実際の例を使って理解を深めていきましょう。
テーブルの準備
まず、Employeesという従業員テーブルを以下のように作成します:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(50),
Department VARCHAR(50),
Salary INT
);
INSERT INTO Employees (EmployeeID, Name, Department, Salary) VALUES
(1, '佐藤', '営業', 400000),
(2, '田中', 'IT', 500000),
(3, '鈴木', '人事', 450000),
(4, '高橋', '営業', 420000);
基本的なDELETEの例
「営業」部門の従業員を削除したい場合、次のように書きます:
DELETE FROM Employees
WHERE Department = '営業';
結果
このSQLを実行すると、「営業」部門に属する佐藤さんと高橋さんのデータが削除されます。
DELETE文の注意点
DELETE文を使う際にはいくつかの注意点があります。
WHERE句の重要性
DELETE文でWHERE句を指定しない場合、テーブル内のすべてのレコードが削除されます。
DELETE FROM Employees;
上記を実行すると、Employeesテーブル内の全データが失われます。
トランザクションの活用
間違ってレコードを削除してしまった場合、データを戻すのは難しいです。そこで、DELETE文の前にトランザクションを使うと安全です。
BEGIN TRANSACTION;
DELETE FROM Employees WHERE Department = 'IT';
-- 削除を確認
ROLLBACK; -- 変更を元に戻す
このようにROLLBACKを使えば、誤って削除しても変更を元に戻すことができます。
外部キー制約の影響
削除対象のテーブルが外部キー制約を持っている場合、削除が制限されることがあります。この場合、ON DELETE CASCADEを使うと、関連するデータも自動的に削除できます。
ALTER TABLE Orders
ADD CONSTRAINT fk_employee
FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
ON DELETE CASCADE;
DELETE文の応用例
複数条件での削除
「IT部門で、給与が50万円以上」の従業員を削除するには、以下のように複数の条件を指定します:
DELETE FROM Employees
WHERE Department = 'IT' AND Salary >= 500000;
サブクエリを使った削除
別のテーブルを参照して削除することも可能です。
例えば、「売上がない従業員」のデータを削除する場合:
DELETE FROM Employees
WHERE EmployeeID NOT IN (
SELECT EmployeeID FROM Sales
);
演習問題
ここまで学んだ内容をもとに、以下の演習問題に挑戦してみましょう。
問題 1: 部門別の削除
次のようなDepartmentsテーブルがあるとします。
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES
(1, '営業'),
(2, 'IT'),
(3, '人事');
問:Departmentsテーブルから「営業部門」のデータを削除してください。
問題 2: サブクエリを使った削除
Employeesテーブルから「売上が存在しない従業員」を削除するSQLを書いてください。ただし、Salesテーブルが以下のように存在するとします:
CREATE TABLE Sales (
SaleID INT PRIMARY KEY,
EmployeeID INT,
Amount INT
);
INSERT INTO Sales (SaleID, EmployeeID, Amount) VALUES
(1, 2, 100000),
(2, 3, 200000);
解答例
解答 1: 部門別の削除
DELETE FROM Departments
WHERE DepartmentName = '営業';
解答 2: サブクエリを使った削除
DELETE FROM Employees
WHERE EmployeeID NOT IN (
SELECT EmployeeID FROM Sales
);
まとめ
この記事では、SQL ServerにおけるDELETE文の基本的な使い方から応用的な使用例、さらに演習問題までを解説しました。
DELETE文は強力なコマンドですが、誤った使用はデータ損失につながるため、WHERE
句の指定やトランザクションの利用が重要です。
この機会に実際のデータベースで練習し、確実に理解を深めましょう。
おわりに
本記事で紹介した内容が、SQL Serverを使う上での一助となれば幸いです。
DELETE文はデータ管理に欠かせない操作ですが、慎重に扱うことが求められます。
今後もさらにSQLの知識を深め、効率的なデータベース運用を目指しましょう!