Краткое сравнение Oracle SQL и ANSI SQL - Оператор UPDATE
ОГЛАВЛЕНИЕ
Страница 3 из 8
Оператор UPDATE
Оператор UPDATE в Oracle полностью соответствует требованиям начального уровня ANSI SQL. Однако имеются некоторые дополнительные возможности. Если отбросить возможности предназначенные для работы с объектными таблицами вот они:
- использование табличных алиасов для ссылок на обновляемую таблицу в подзапросах
- подзапросы в правой части предложения SET в отличие от только выражений в ANSI SQL
- список обновляемых колонок в левой части предложения SET, в отличии от одной колонки в ANSI SQL
- подзапросы в предложении SET или WHERE могут ссылаться на обновляемую таблицу
- Оператор UPDATE поддерживает обновление подзапросов
Проиллюстрируем эти возможности на примере:
1 UPDATE emp aaa
2 SET deptno =(SELECT deptno FROM dept WHERE loc='Москва'),
3 SET (sal,comm)=(SELECT 1.1*AVG(sal),1.5*AVG(comm)
4 FROM emp bbb WHERE aaa.deptno=bbb.deptno)
- 1. таблице emp присваивается алиас aaa для последующей ссылки на обновляемую таблицу в подзапросе
- 2. значение столбца deptno берется из подзапроса, возвращающего одно значение
- 3. значение столбцов sal и col ,берется из подзапроса, возвращающего два значения
- 4. делается выборка из таблицы emp, которая обновляется этим же оператором
5 UPDATE emp SET comm=NULL WHERE job='управляющий'
этот запрос будет аналогичен следующему запросу:
UPDATE (SELECT * FROM emp )SET comm=NULL WHERE job='управляющий'
- 5. в данном примере Oracle будет обновлять временное представление SELECT * FROM emp. После предложения UPDATE в круглых скобках может следовать любой оператор SELECT. На основе этого оператора строится временное представление. Если это представление удовлетворяет условиям на обновляемые представления Oracle выполнит запрос.