Оператор update обновляет значения одного или нескольких столбцов в выбранных строках одной таблицы. В операторе указывается целевая таблица, которая должна быть модифицирована, при этом пользователь должен иметь разрешение на обновление таблицы и каждого конкретного столбца. Предложение where отбирает строки таблицы, подлежащие обновлению. В предложении set указывается, какие столбцы должны быть обновлены, и для них задаются новые значения.
В этом примере в предложении WHERE определена одна строка таблицы CUSTOMERS, а предложение set присваивает новые значения двум столбцам этой строки. Условия поиска, которые могут быть заданы в предложении where оператора update, в точности соответствуют условиям поиска, доступным в операторах select и delete.
Как и оператор delete, оператор update может одновременно обновить несколько строк, соответствующих условию поиска. Например:
Оператор update выполняется таким образом: все строки таблицы salesreps по очереди проверяются на соответствие условию поиска. Строки, для которых условие поиска выполняется (результат проверки имеет значение true), обновляются, а строки, для которых условие не выполняется (результат проверки имеет значение false или null), не обновляются. Поскольку оператор update данного типа производит в таблице поиск строк, он иногда называется поисковым. Другой тип оператора update, всегда обновляющий одну строку, называется позиционным. Позиционный оператор update применяется только в программном SQL.
Предложение set в операторе update представляет собой список операций присваивания, отделяемых друг от друга запятыми. В каждой операции идентифицируется целевой столбец, который должен обновляться, и определяется новое значение для этого столбца. Каждый целевой столбец должен встречаться в списке только один раз; не должно быть двух операций присваивания для одного и того же целевого столбца. Согласно стандарту ANSI/ISO, для целевых столбцов необходимо использовать простые имена, но некоторые СУБД допускают использование полных имен столбцов. Так как эти имена являются ссылками на столбцы целевой таблицы, то в любом случае неоднозначность невозможна.
Выражение в операции присваивания может быть любым правильным выражением SQL, результирующее значение которого имеет тип данных, соответствующий целевому столбцу. Необходимо, чтобы значение выражения вычислялось на основе значений строки, которая в данный момент обновляется в целевой таблице. Оно не может включать в себя какие-либо агрегатные функции или вложенные запросы.
Если выражение в операции присваивания содержит ссылку на один из столбцов целевой таблицы, то для вычисления выражения используется значение этого столбца в текущей строке, которое было перед обновлением. То же самое справедливо для ссылок на столбцы в предложении where. В качестве примера рассмотрим следующий (несколько надуманный) оператор UPDATE:
Таким образом, порядок операций присваивания в предложении set не играет роли; он может быть любым.