ОБНОВЛЕНИЕ ДАННЫХ (инструкция UPDATE)
Инструкция 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
ON (dest.col1 = source1.col1)
WHEN MATCHED THEN
UPDATE SET dest.col2 = source1.col2,
dest.col3 = source1.col3
WHERE source1.col2 IS NOT NULL
DELETE source1.col2 IS NULL
WHEN NOT MATCHED THEN
INSERT (dest.col1, dest.col2, dest.col3)
VALUES (source1.col1, source1.col2, source1.col3)
WHERE source1.col2 IS NOT NULL
Пример использования:
MERGE INTO copy_emp c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);
Дата добавления: 2015-08-26; просмотров: 859;