Параметрические запросы
До сих пор условие отбора мы записывали явно после оператора WHERE. Но во многих случаях условие отбора становится известным только во время выполнения программы. SQL позволяет вводить условия отбора в виде параметров запроса. В этом случае такие запросы называются параметрическими или динамическими. Для увеличения эффективности выполнения таких запросов в некоторых СУБД можно вызвать функцию PREPARE, которая подготовит запрос к запуску, т.е. зарезервирует необходимую память и проведет его оптимизацию. Тогда сразу после задания параметра запрос будет готов к запуску. Для освобождения зарезервированной памяти в таком случае применяется функция UNPREPARE. Для задания параметра в Access необходимо некоторый текст, являющийся именем параметра, заключить в квадратные скобки. Этот же текст будет выводится в виде приглашения в окне задания значения параметра. Имя параметра должно отличаться от названий полей таблиц, включенных в запрос. Дополнительно можно явно определить типы параметров с помощью инструкции PARAMETERS в виде [имя параметра] тип данных, [имя параметра] тип данных, …, что позволяет контролировать значения параметров на соответствие типу еще при их вводе. В таком случае инструкция PARAMETERS располагается перед описанием запроса.
PARAMETERS [Введите Год:] INT;
SELECT Клиенты.Фамилия FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента = Заказы.КодКлиента WHERE Year(Заказы.Дата) = [Введите Год:];
Вложенные запросы
Инструкции SELECT могут многократно вкладываться друг в друга. Вложенная инструкция SELECT записывается после оператора WHERE и служит для отбора записей основного запроса. SQL выполняет вложенный подзапрос и затем сравнивает каждую строку основного запроса с результатом вложенного. Вложенные запросы записываются внутри скобок. Например,
SELECT Фамилия, Имя FROM Клиенты WHERE Кредит < (SELECT AVG(Кредит) FROM Клиенты);
Если подчиненный запрос возвращает набор записей, то вместо операторов сравнения можно использовать функции ALL, SOME, ANY, EXISTS, IN, получившие по функции EXISTS название кванторов существования. Квантор существования EXISTS обычно записывается следующим образом EXISTS(SELECT * FROM …). Перед ним можно поставить NOT для инверсии результата. Выражение EXISTS считается истинным тогда и только тогда, когда результат вычисления подзапроса является непустым множеством. В запросах данного типа необходимо явно определять связь между таблицами в виде условия отбора после оператора WHERE вложенного запроса. В качестве примера выберем фамилии покупателей, которым был продан компьютер «Pentium II 350»:
SELECT Фамилия FROM Клиенты WHERE EXISTS(SELECT * FROM Заказы WHERE Заказы.код_клиента = Клиенты.код_клиента And [Наименование товара] = ”Pentium II 350”);
Кванторы SOME и ANY (синонимы) используются для отбора в главном запросе записей, которые удовлетворяют сравнению с записями, отобранными подчиненным запросом. Например: SELECT * FROM Товары WHERE Цена > ANY(SELECT Цена FROM Заказано WHERE Скидка >= 0.25); Этот запрос отбирает все товары, цена которых больше, чем цена любого товара (т.е. самого недорогого), проданного со скидкой 25%.
Квантор ALL используется для отбора в главном запросе записей, которые удовлетворяют сравнению со всеми записями, отобранными подчиненным запросом.
SELECT Марка FROM Товары WHERE Цена > ALL(SELECT Цена FROM Заказано WHERE Скидка >= 0.25); Этот запрос отбирает все товары, цена которых больше, чем цена всех товаров (т.е. самого дорогого), проданных со скидкой 25%.
Квантор IN используются для отбора в главном запросе только тех записей, которые содержат значения, совпадающие с одним из отобранных подчиненным запросом.
SELECT Марка FROM Товары WHERE Цена IN(SELECT Цена FROM Заказано WHERE Скидка >= 0.25); Этот запрос отбирает все товары, цена которых совпадает с ценой товаров, проданных со скидкой 25%.
Запросы действий
С помощью запросов действий пользователь может изменять или переносить данные в таблицах, обновлять, добавлять или удалять группы записей, а также создавать новые таблицы. Некоторые возможности редактирования существуют и в запросах выборки, т.е. изменения, сделанные в запросе, автоматически переносятся на базовые таблицы запроса. Но редактируемыми может быть только небольшая группа запросов. Это простые однотабличные запросы выборки без применения предикатов, группировки и агрегатных функций.
Существует четыре запроса действий: на добавление записей, на удаление записей, на обновления записей и на создание таблицы.
Дата добавления: 2016-10-26; просмотров: 3189;