Инструкция UPDATE обновляет значения одного или нескольких столбцов в выбранных строках одной таблицы.
update имя_таблицы
set имя_столбца_1=значение_1 [, имя_столбца_2=значение_2 …]
[WHERE условие];
В инструкции указывается таблица, значения в которой должны быть изменены, при этом пользователь должен иметь разрешение на обновление таблицы и каждого конкретного столбца. Предложение WHERE отбирает строки таблицы, подлежащие обновлению. В предложении SET указывается, какие столбцы должны быть обновлены, и для них задаются новые значения. Приведем пример инструкции.
Увеличить заработную плату менеджеров на 10%
update staff
set salary=salary*1.1
WHERE position=‘manager’;
Условия отбора, которые могут быть заданы в предложении WHERE инструкции UPDATE, в точности соответствуют условиям отбора, доступным в инструкциях SELECT и DELETE.
Как и инструкция DELETE, инструкция UPDATE может одновременно обновить несколько строк, соответствующих условию отбора. Например:
Перевести всех служащих из отделения № 2 в отделение № 1
update staff
set bno=1
WHERE bno=2;
Предложение SET в инструкции представляет собой список операций присваивания, отделяемых друг от друга запятыми. В каждой операции идентифицируется столбец, который должен обновляться, и определяется новое значение для этого столбца. Каждый целевой столбец должен встречаться в списке только один раз. Согласно стандарту ANSI/ISO, для столбцов необходимо использовать простые имена, но некоторые СУБД допускают использование полных имен столбцов.
Присваиваемое значение может быть сформировано с помощью выражения. Выражение в операции присваивания может быть любым допустимым SQL-выражением, результирующее значение которого имеет тип данных, соответствующий целевому столбцу. Необходимо, чтобы значение выражения вычислялось на основе значений строки, которая в данный момент обновляется в целевой таблице. Оно не может включать в себя какие-либо статистические функции или подчиненные запросы.
Если выражение в операции присваивания содержит ссылку на один из столбцов таблицы, то для вычисления выражения используется значение этого столбца в текущей строке, которое было перед обновлением. То же самое справедливо для ссылок на столбцы в предложении WHERE.
Обновление всех строк. Предложение WHERE в инструкции UPDATE является необязательным. Если оно опущено, то обновляются все строки целевой таблицы. Например:
Увеличить заработную плату всех сотрудников на 5%:
update staff
set salary=1.05*salary;
Инструкции UPDATE с подчиненным запросом. В инструкции UPDATE, так же как и в инструкции DELETE, подчиненные запросы могут играть важную роль, поскольку они дают возможность отбирать строки для обновления, опираясь на информацию из других таблиц. Например:
Всем служащим отделения Минского отделения увеличить зарплату на 10%
update staff
set salary=1.1*salary
WHERE bno IN (SELECT bno
FROM branch
WHERE city=‘Минск’);
Подчиненные запросы в предложении WHERE инструкции UPDATE, так же как и в инструкции DELETE, могут иметь любой уровень вложенности и содержать внешние ссылки на целевую таблицу инструкции UPDATE.
Инструкция MERGE. Начиная с версии Oracle 9i, появилась возможность использовать инструкцию MERGE INTO, которая объединяет в себе возможности инструкций вставки, обновления и удаления, делая их более удобными для пользователей.
Общий синтаксис инструкции MERGE INTO:
MERGE INTO destination_table dest
USING (SELECT col1, col2, col3 FROM source_table) source1