DELETE

SQL - Language Statements

DELETE

delete rows of a table

1999-07-20

    DELETE FROM [ ONLY ] table [ WHERE condition ]

1998-04-15

## Inputs

`table`

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

`condition`

- This is an SQL selection query which returns the rows which are to be deleted.

  Refer to the SELECT statement for further description of the WHERE clause.

1998-04-15

## Outputs

`DELETE `count``

- Message returned if items are successfully deleted. The `count` is the number of rows deleted.

  If `count` is 0, no rows were deleted.

1998-04-15

## Description

`DELETE` removes rows which satisfy the WHERE clause from the specified table.

If the condition (WHERE clause) is absent, the effect is to delete all rows in the table. The result is a valid, but empty table.

sql-truncate-title is a PostgreSQL extension which provides a faster mechanism to remove all rows from a table.

By default DELETE will delete tuples in the table specified and all its sub-tables. If you wish to only update the specific table mentioned, you should use the ONLY clause.

You must have write access to the table in order to modify it, as well as read access to any table whose values are read in the `condition`.

## Usage

Remove all films but musicals:

    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)

Clear the table `films`:

    DELETE FROM films;
    SELECT * FROM films;

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

## Compatibility

1998-04-15

### SQL92

SQL92 allows a positioned DELETE statement:

    DELETE FROM table WHERE
        CURRENT OF cursor

where `cursor` identifies an open cursor. Interactive cursors in PostgreSQL are read-only.