Выражение UPDATE

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

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

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

Синтаксис

UPDATE <table_name>
    SET <col_name> = <value> [ , <col_name> = <value> , ... ]
    [ WHERE <condition> ]

Параметры

  • [ SET <col_name> = <value> ]

    Указывает колонку для обновления и значения, которые необходимо записать. Можно указывать несколько выражений через , для любого количества колонок.

  • [ WHERE <condition> ]

    Указывает условие, которое будет использоваться для выбора строк для обновления.

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

    • = равно

    • > больше

    • < меньше

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

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

Примеры

Пример 1

Создадим таблицу с числами от 1 до 10 и обновим колонку numbers, записав в нее значения из нее самой, умноженные на 100:

CREATE TABLE demo.numbers (numbers BIGINT);

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

UPDATE demo.numbers
    SET numbers = numbers*100;
+-------+
| Count |
+-------+
| 10    |
+-------+

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

SELECT * FROM demo.numbers;
+---------+
| numbers |
+---------+
| 100     |
+---------+
| 200     |
+---------+
| 300     |
+---------+
| 400     |
+---------+
| 500     |
+---------+
| 600     |
+---------+
| 700     |
+---------+
| 800     |
+---------+
| 900     |
+---------+
| 1000    |
+---------+

Пример 2

Создадим таблицу с двумя колонками num_1 и num_2. Запишем в колонку num_1 числа от 1 до 10, а колонку num_2 оставим пустой (там будут значения NULL). Обновим колонки num_1 и num_2: запишем в num_1 значения из нее самой, умноженные на 100, а в num_2 — значения из num_1, умноженные на -1. Сделаем все это с условием, что значения из num_1 входят в список (2,4,6,8,10,12):

CREATE TABLE demo.numbers (num_1 BIGINT, num_2 BIGINT);

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

UPDATE demo.numbers
    SET num_1 = num_1*100, num_2 = num_1*-1
    WHERE num_1 in (2,4,6,8,10,12);
+-------+
| Count |
+-------+
| 5     |
+-------+

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

SELECT * FROM demo.numbers;
+-------+-------+
| num_1 | num_2 |
+-------+-------+
| 200   | -2    |
+-------+-------+
| 400   | -4    |
+-------+-------+
| 600   | -6    |
+-------+-------+
| 800   | -8    |
+-------+-------+
| 1000  | -10   |
+-------+-------+
| 1     | null  |
+-------+-------+
| 3     | null  |
+-------+-------+
| 5     | null  |
+-------+-------+
| 7     | null  |
+-------+-------+
| 9     | null  |
+-------+-------+