Структура перекрестного запроса может быть и чуть более сложной, чем в уже рассмотренных примерах. В запрос могут включаться несколько полей, являющихся заголовками строк, а в состав столбцов может быть включено поле, обобщающее итоги по остальным столбцам, причем обобщение подразумевает необязательно суммирование, использоваться может любая агрегатная функция. Запрос может выглядеть, например, следующим образом:
Код поставщика
Поставщик
Итого
…
Синтаксис команды запроса на обновление имеет следующий вид:
Update <имя таблицы>
Set < имя поля 1> = <выражение 1>
[,<имя поля 2> = < выражение 2>]
[, … ]
[Where <условие отбора>]
В описании команды запроса на обновление используются метасимволы, которыми являются < >, [ ], … . При написании реального запроса на языке SQL они должны быть заменены по смыслу на что-то еще. Конструкция [, … ] означает и так далее.
Приведем пример запроса на обновление. Предположим, что цены выросли на 10% . Чтобы отразить изменение цен в таблице Товар необходимо написать следующую команду на языке SQL:
Update Товар
Set Цена = Цена*1,1
Если цены выросли не на все товары, то может быть задано условие отбора, например, цены выросли на товары 002 и 004.
Update Товар
Set Цена = Цена*1,1
Where КодТов In (“002”,”004”)
Вместо физической таблицы в запросе на обновление может использоваться другой ранее созданный запрос. При этом необходимо, чтобы запрос был обновляемым. Запрос, включающий несколько таблиц, будет обновляемым, если он создан с использованием внутреннего соединения таблиц (Inner join) и было установлено требование ссылочной целостности. При создании запроса на обновление возможны каскадные обновления, то есть при изменении данных в родительской таблице автоматически будут обновляться данные в дочерней. В Microsoft Access разрешение функции каскадного обновления устанавливается на схеме данных.
Синтаксис команды запроса на удаление имеет следующий вид:
Delete [<имя таблицы >.*]
From <связка таблиц>
Where <условие отбора>
Имя таблицы, из которой удаляются записи, должно входить в связку таблиц.
Чтобы из таблицы Поставка удалить записи, дата поставки которых раньше 01.01.2004, будет использоваться следующая команда:
Delete Поставка.*
From Поставка
Where ДатаПост<=#01.01.04#
При создании запроса на удаление может быть установлена опция каскадного удаления. При каскадном удалении, если удаляется запись из родительской таблицы, автоматически удаляются все соответствующие ей записи в дочерних таблицах.