[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

Name

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

Synopsis

DELETE FROM [ ONLY ] table [ WHERE condition ]

入力

table

既存のテーブル名です。

condition

削除すべき行を返す、SQLの SELECT 問い合わせです。

WHERE句についてのより詳細については、SELECT文を参照して下さい。

出力

DELETE count

各行が正常に削除された時に返されるメッセージです。 countは削除された行数を示します。

countが0の場合、行が削除されなかったことを示します。

説明

DELETEは指定したテーブルからWHERE句を満たす行を削除します。

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

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

デフォルトで、DELETEは指定されたテーブル、及びそのサブテーブルすべてのタプルを削除します。指定したテーブルのみを更新したい場合には、ONLY句を使用して下さい。

テーブルを変更するためには書き込み権限が必要です。あわせて、 conditionで読み込まれる値を持つテーブルへの読み込み権限も必要になります。

使用方法

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

DELETE FROM films WHERE kind <> 'Musical';
SELECT * FROM films;

 code  |           title           | did | date_prod  |  kind   | len
-------+---------------------------+-----+------------+---------+-------
 UA501 | West Side Story           | 105 | 1961-01-03 | Musical | 02:32
 TC901 | The King and I            | 109 | 1956-08-11 | Musical | 02:13
 WD101 | Bed Knobs and Broomsticks | 111 |            | Musical | 01:57
(3 rows)

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

DELETE FROM films;
SELECT * FROM films;

 code | title | did | date_prod | kind | len
------+-------+-----+-----------+------+-----
(0 rows)

互換性

SQL92

SQL92では、位置によるDELETE文が可能です。

DELETE FROM table WHERE
    CURRENT OF cursor

ここで、cursorはオープン済みのカーソルの識別子です。PostgreSQL の対話式カーソルは読み取り専用です。