概要:このチュートリアルでは、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つ以上の行を削除するためにそれを適用する方法を理解できたはずです。