SQLの`DELETE`ステートメントは、
データベース内のデータを操作するDML(データ操作言語)の一つであり、テーブルから
レコードを削除するために使用されます。このステートメントには、大きく分けて2つの使い方があります。
一つは、`WHERE`句を使って条件を指定し、その条件に一致する特定の
レコードのみを削除する方法です。例えば、`DELETE FROM テーブル名 WHERE 条件式;` のように記述します。この場合、条件式に合致する
レコードだけが削除され、他の
レコードには影響がありません。条件式には、比較演算子や論理演算子などを用いて、柔軟な削除条件を設定できます。
もう一つは、`WHERE`句を省略し、テーブル内のすべての
レコードを一括で削除する方法です。この場合、`DELETE FROM テーブル名;` のように記述します。この操作は、テーブル内のデータを完全に消去するため、実行には注意が必要です。
`DELETE`ステートメント実行時には、副問い合わせを使用することで、削除対象以外のテーブルを参照することも可能です。また、
データベースによっては、`USING`や追加の`FROM`句を使用することで、参照するテーブルを明示的に指定できる場合もあります。これにより、より複雑な削除操作を柔軟に行うことが可能になります。
また、`DELETE`ステートメントは、
データベーストリガーと連携して、他のテーブルの
レコードを自動的に削除することができます。例えば、
外部キー制約で関連付けられた2つのテーブルがある場合、一方のテーブルで
レコードが削除されると、トリガーにより、関連するもう一方のテーブルの
レコードも自動的に削除されます。これにより、
データベース全体の整合性が保たれます。
ただし、テーブル内のすべての
レコードを削除する場合には、一般的に`DELETE`ステートメントよりも、`TRUNCATE TABLE`ステートメントの方が高速に処理できます。`TRUNCATE TABLE`は、テーブルの構造を残したまま、すべての
レコードを削除する操作であり、ログの記録を省略できるため、削除処理のパフォーマンスが向上します。
以下に、具体的な`DELETE`ステートメントの例を示します。
- - テーブル `pies` から、`flavour` カラムの値が `'Lemon Meringue'` であるレコードを削除する場合:
sql
DELETE FROM pies WHERE flavour = 'Lemon Meringue';
- - テーブル `mytable` から、`mycol` カラムの値が `100` より大きいレコードを削除する場合:
sql
DELETE FROM mytable WHERE mycol > 100;
- - テーブル `mytable` のすべてのレコードを削除する場合:
sql
DELETE FROM mytable;
このように、`DELETE`ステートメントは
SQLにおいて、
データベースのデータを操作するための重要な役割を担っています。データの削除は、
データベースの保守や運用において、不可欠な操作であるため、`DELETE`ステートメントの正しい理解と適切な使用が求められます。