概要:このチュートリアルでは、SQL DELETE
文を使用して、テーブルから1つ以上の行を削除する方法を学習します。
SQL DELETE文の概要
テーブルから1つ以上の行を削除するには、DELETE
文を使用します。 DELETE
文の一般的な構文は次のとおりです。
DELETE
FROM
table_name
WHERE
condition;
Code language: SQL (Structured Query Language) (sql)
まず、行を削除するテーブルの名前を指定します。
次に、WHERE
句に条件を指定して、削除する必要がある行を識別します。 WHERE
句を省略すると、テーブルのすべての行が削除されます。そのため、DELETE
文は常に注意して使用する必要があります。
一般的に、DELETE
文は、SELECT
文のように結果セットを返しません。ただし、削除された行の数を返します。
SQL DELETE文の例
employees
テーブルとdependents
テーブルを使用して、DELETE
文を説明します。

テーブルから1行を削除するSQL DELETE
従業員IDが105のDavidが、扶養家族リストからFredを削除したいとします。 Fred
の扶養家族IDは16であることがわかっているので、次のDELETE
文を使用して、dependents
テーブルからFredを削除します。
DELETE FROM dependents
WHERE
dependent_id = 16;
Code language: SQL (Structured Query Language) (sql)
WHERE
句には、Fredを識別する主キー式が含まれているため、DELETE
文は1行だけ削除します。
次の文を使用して、扶養家族ID 16の行が削除されたことを確認できます。
SELECT
COUNT(*)
FROM
dependents
WHERE
dependent_id = 16;
Code language: SQL (Structured Query Language) (sql)

複数行を削除するSQL DELETEの例
テーブルから複数の行を削除するには、WHERE
句の条件を使用して、削除する必要がある行を識別します。たとえば、次の文では、IN
演算子を使用して、IDが100、101、または102の従業員の扶養家族を含めます。
DELETE FROM dependents
WHERE
employee_id IN (100 , 101, 102);
Code language: SQL (Structured Query Language) (sql)
関連テーブルから行を削除するSQL DELETE
1人の従業員には、扶養家族が0人以上いる場合がありますが、1人の扶養家族は1人の従業員にのみ属します。 dependents
テーブルのemployee_id
列は、employees
テーブルのemployee_id
列にリンクされています。
employees
テーブルとdependents
テーブルの関係は、1対多です。
論理的には、扶養家族は従業員を参照せずに存在することはできません。つまり、従業員を削除すると、その扶養家族も削除する必要があります。
たとえば、従業員ID 192とその従業員のすべての扶養家族を削除するには、次のように2つのDELETE
文を実行する必要があります。
DELETE
FROM
employees
WHERE
employee_id = 192;
DELETE
FROM
dependents
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)
ほとんどのデータベースシステムは、外部キー制約をサポートしているため、テーブルから1つの行が削除されると、外部キーテーブルの行も自動的に削除されます。
そのため、次のDELETE
文が実行されると、
DELETE
FROM
employees
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)
employee_id
が192のすべての行も自動的に削除されます。
テーブルからすべての行をより効率的に削除するには、WHERE
句のないDELETE
文を使用する代わりに、TRUNCATE TABLE
文を使用します。
これで、SQL DELETE
文と、テーブルから1つ以上の行を削除するためにそれを適用する方法を理解できたはずです。