SQL ServerのDELETE文の使い方と実践的な演習問題

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の知識を深め、効率的なデータベース運用を目指しましょう!