Выражение DELETE

Выражение DELETE удаляет строки из таблицы. Условие для выбора удаляемых строк можно задать через выражение WHERE.

В качестве результата запроса возвращается количество удаленных строк.

Вместо удаления или изменения строк в существующих таблицах (выражения DELETE и UPDATE) рекомендуется создавать новые таблицы на основе существующих с применением необходимых фильтров (выражение CREATE TABLE) и при необходимости удалять существующие (выражение TRUNCATE).

Синтаксис

DELETE FROM <table_name>
    [ WHERE <condition> ]

Параметры

  • [ WHERE <condition> ]

    Указывает условие, которое будет использоваться для выбора строк для удаления. Если этот параметр опущен, все строки в таблице удаляются, но таблица не удаляется.

    Разрешенные операторы внутри условия <condition>:

    • = равно

    • > больше

    • < меньше

    • in (…​) входит в список

    • их комбинации

Примеры

Пример 1

Создадим таблицу с числами от 1 до 100 и удалим из нее все строки без дополнительных условий:

CREATE TABLE demo.numbers (numbers BIGINT);

INSERT INTO demo.numbers (numbers)
    SELECT unnest(generate_series(1,100));

DELETE FROM demo.numbers;
+-------+
| count |
+-------+
| 100   |
+-------+

Проверим содержимое таблицы:

SELECT * FROM demo.numbers;
+---------+
| numbers |
+---------+
0 rows

Пример 2

Создадим таблицу с числами от 1 до 100 и удалим из нее строки с числами меньше 51 или больше 55:

CREATE TABLE demo.numbers (numbers BIGINT);

INSERT INTO demo.numbers (numbers)
    SELECT unnest(generate_series(1,100));

DELETE FROM demo.numbers
    WHERE numbers < 51 OR numbers > 55;
+-------+
| count |
+-------+
| 95    |
+-------+

Проверим содержимое таблицы:

SELECT * FROM demo.numbers
+---------+
| numbers |
+---------+
| 51      |
+---------+
| 52      |
+---------+
| 53      |
+---------+
| 54      |
+---------+
| 55      |
+---------+

Пример 3

Создадим таблицу с числами от 1 до 10 и удалим из нее строки с числами из списка (2,4,6,8,10,12):

CREATE TABLE demo.numbers (numbers BIGINT);

INSERT INTO demo.numbers (numbers)
    SELECT unnest(generate_series(1,10));

DELETE FROM demo.numbers
    WHERE numbers IN (2,4,6,8,10,12);
+-------+
| count |
+-------+
| 5     |
+-------+

Проверим содержимое таблицы:

SELECT * FROM demo.numbers;
+---------+
| numbers |
+---------+
| 1       |
+---------+
| 3       |
+---------+
| 5       |
+---------+
| 7       |
+---------+
| 9       |
+---------+