PostgreSQL 8.0.1 Documentation
Prev | Fast Backward |  | Fast Forward | Next

# DELETE

## Name

DELETE -- delete rows of a table

## Synopsis

    DELETE FROM [ ONLY ] table [ WHERE condition ]

## Description

`DELETE` deletes rows that satisfy the `WHERE` clause from the specified table. If the `WHERE` clause is absent, the effect is to delete all rows in the table. The result is a valid, but empty table.

> Tip: TRUNCATE is a PostgreSQL extension that provides a faster mechanism to remove all rows from a table.

By default, `DELETE` will delete rows in the specified table and all its subtables. If you wish to delete only from the specific table mentioned, you must use the `ONLY` clause.

You must have the `DELETE` privilege on the table to delete from it, as well as the `SELECT` privilege for any table whose values are read in the `condition`.

## Parameters

`table`

  The name (optionally schema-qualified) of an existing table.

`condition`

  A value expression that returns a value of type `boolean` that determines the rows which are to be deleted.

## Outputs

On successful completion, a `DELETE` command returns a command tag of the form

    DELETE count

The `count` is the number of rows deleted. If `count` is 0, no rows matched the `condition` (this is not considered an error).

## Notes

PostgreSQL lets you reference columns of other tables in the `WHERE` condition. For example, to delete all films produced by a given producer, one might do

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

What is essentially happening here is a join between `films` and `producers`, with all successfully joined `films` rows being marked for deletion. This syntax is not standard. A more standard way to do it is

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

In some cases the join style is easier to write or faster to execute than the sub-select style. One objection to the join style is that there is no explicit list of what tables are being used, which makes the style somewhat error-prone; also it cannot handle self-joins.

## Examples

Delete all films but musicals:

    DELETE FROM films WHERE kind <> 'Musical';

Clear the table `films`:

    DELETE FROM films;

## Compatibility

This command conforms to the SQL standard, except that the ability to reference other tables in the `WHERE` clause is a PostgreSQL extension.

Prev | Home | Next
DECLARE | Up | DROP AGGREGATE