PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# DELETE

## 名前

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

## 概要

    DELETE FROM [ ONLY ] table [ WHERE condition ]

## 説明

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

> ティップ: PostgreSQLの拡張であるTRUNCATEは、より高速に、テーブルから全ての行を削除する機構を提供します。

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

テーブルから削除するためには、そのテーブルの`DELETE`権限が必要です。 同様に、`condition`において値を読み取るテーブルに対する`SELECT`権限も必要です。

## パラメータ

`table`

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

`condition`

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

## 出力

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

    DELETE count

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

## 注釈

PostgreSQLでは`WHERE`条件内で他のテーブルを参照することができます。 例えば、指定プロデューサが製作した全ての映画を削除する時に以下のように行うことができます。

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

これが基本的に、`films`と`producers`との間で結合され、結合される`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に準拠しています。 ただし、`WHERE`句で他のテーブルを参照できるという機能はPostgreSQLの拡張です。

前のページ | ホーム | 次のページ
DECLARE | 上に戻る | DROP AGGREGATE