DELETE
テーブルから行を削除します。
注記
単一 SQL ステートメントの最大サイズは 16 MB です。
構文
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ] DELETE [ FROM ] { table_name | materialized_view_name } [ { USING } table_name, ... ] [ WHERE condition ]
パラメータ
- WITH 句
1 つ以上の common-table-expressions を指定する任意の句。「WITH 句」を参照してください。
- FROM
-
FROM キーワードは、USING 句が指定されている場合を除き、オプションです。ステートメント
delete from event;
とdelete event;
は、EVENT テーブルからすべての行を削除する操作と同じです。注記
テーブルからすべての行を削除するには、テーブルに対して TRUNCATE を実行します。TRUNCATE は DELETE よりもはるかに効率的であり、VACUUM および ANALYZE を必要としません。ただし、TRUNCATE では、その操作を実行するトランザクションがコミットされることに注意してください。
- table_name
-
一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルで DELETE 権限を持つユーザーのみが、テーブルから行を削除できます。
大きなテーブルで制限のない削除操作を実行するには、TRUNCATE コマンドを使用します。「TRUNCATE」を参照してください。
注記
テーブルから多数の行を削除した後:
-
ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。
-
テーブルを分析して、クエリプランナーの統計情報を更新します。
-
- materialized_view_name
-
マテリアライズドビュー。DELETE ステートメントは、マテリアライズドビューへのストリーミング取り込みに使用されるマテリアライズドビューで機能します。マテリアライズドビューの所有者またはマテリアライズドビューに対する DELETE 権限を持つユーザーのみが、マテリアライズドビューから行を削除できます。
ユーザーに IGNORE RLS 権限が付与されていない行レベルセキュリティ (RLS) ポリシーでは、ストリーミング取り込みに使用されるマテリアライズドビューで DELETE を実行することはできません。ただし、例外として、DELETE を実行するユーザーに IGNORE RLS が付与されていれば、DELETE は正常に実行されます。詳細については、「RLS ポリシーの所有権と管理」を参照してください。
- USING table_name, ..。
-
USING キーワードは、WHERE 句の条件で追加のテーブルを参照するときに、テーブルリストを導入するために使用されます。例えば、次のステートメントでは、EVENT テーブルと SALES テーブルに対する結合条件を満たす EVENT テーブルから、すべての行を削除します。FROM リストで、SALES テーブル名を明示的に指定する必要があります。
delete from event using sales where event.eventid=sales.eventid;
USING 句でターゲットテーブル名を繰り返すと、DELETE 操作が自己結合を実行します。USING 構文で同じクエリを書く代わりに、WHERE 句でサブクエリを使用することもできます。
- WHERE condition
-
削除対象を、条件を満たす行に制限するオプションの句。例えば、列に対する制限条件、結合条件、クエリ結果に基づく条件などがあります。クエリでは、DELETE コマンドのターゲットではないテーブルを参照できます。次に例を示します。
delete from t1 where col1 in(select col2 from t2);
条件を指定しない場合、テーブルのすべての行が削除されます。
例
CATEGORY テーブルからすべての行を削除します。
delete from category;
CATEGORY テーブルから CATID 値が 0~9 の行を削除します。
delete from category where catid between 0 and 9;
LISTING テーブルから、SELLERID 値が SALES テーブルに存在しない行を削除します。
delete from listing where listing.sellerid not in(select sales.sellerid from sales);
次の 2 つのクエリはいずれも、EVENT テーブルへの結合と CATID に対する追加の制限に基づいて、CATEGORY テーブルから 1 行を削除します。
delete from category using event where event.catid=category.catid and category.catid=9;
delete from category where catid in (select category.catid from category, event where category.catid=event.catid and category.catid=9);
次のクエリは、mv_cities
マテリアライズドビューからすべての行を削除します。この例で使用しているマテリアライズドビュー名はサンプルです。
delete from mv_cities;