[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

DELETE

名前

DELETE -- テーブルから行を削除する

概要

DELETE FROM [ ONLY ] table
    [ USING usinglist ]
    [ WHERE condition ]

説明

DELETEは、指定したテーブルからWHERE句を満たす行を削除します。 WHEREがない場合、指定したテーブルの全ての行を削除することになります。 この結果、そのテーブルは存在するが中身が空のテーブルになります。

ティップ: PostgreSQLによる拡張であるTRUNCATEは、より高速に、テーブルから全ての行を削除する仕組みを持っています。

デフォルトでは、DELETEは指定されたテーブルおよびその全ての子テーブルの行を削除します。 指定されたテーブルのみを削除したい場合は、ONLY句を使用してください。

データベース内のほかのテーブルに含まれる情報を用いてテーブル内の行を削除する方法には、副問い合わせとUSING句で追加テーブルを指定する方法という2つがあります。 どちらの技法が適切かはその状況によります。

削除を実行するには、そのテーブルのDELETE権限が必要です。 また、USING句内のテーブルに対するSELECT権限、および、conditionで使用する値を読み取るために、その値が含まれるテーブルに対するSELECT権限も必要です。

パラメータ

ONLY

指定された場合、指名したテーブルのみから行を削除します。 指定されなかった場合、指名したテーブルを継承するテーブルも処理されます。

table

既存のテーブル名です(スキーマ修飾名も可)。

usinglist

WHERE条件内に他のテーブルの列を許可するための、テーブル式のリストです。 これは、SELECT文のFROMにおいて指定できるテーブルのリストと同様です。 例えば、テーブル名の別名も指定することができます。 自己結合を設定する目的以外ではusinglistに対象のテーブルを繰り返さないでください。

condition

削除すべき行を決定する、boolean型の値を返す式です。

出力

正常に終了した場合、DELETEコマンドは以下の形式のコマンドタグを返します。

DELETE count

countは削除した行数です。 countが0の場合、conditionを満たす行が存在しなかったことを示します (これはエラーとはみなされません)。

注釈

PostgreSQLでは、USING句で他のテーブルを指定することで、WHERE条件内で他のテーブルを参照することができます。 例えば、指定したプロデューサが製作した全ての映画を削除する時は、次のようなコマンドを実行します。

DELETE FROM films USING producers
  WHERE producer_id = producers.id AND producers.name = 'foo';

ここでは、filmsproducersとを結合して、films行に削除用の印を付けるという作業を行っています。 この構文は標準に従ったものではありません。 より標準的な方法は以下の通りです。

DELETE FROM films
  WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');

filmsテーブルからmusical以外を全て削除します。

DELETE FROM films WHERE kind <> 'Musical';

filmsテーブルを空にします。

DELETE FROM films;

互換性

このコマンドは標準SQLに準拠しています。 ただし、USING句とWHERE句で他のテーブルを参照する機能はPostgreSQLの拡張です。