Подчиненные запросы SQL
Часто невозможно решить задачу путем использования одного запроса. Это особенно актуально в тех случаях, когда значение, или несколько значений, с которыми надо сравнивать, заранее не определено и должно быть вычислено в момент выполнения запроса.
Подчиненным запросом называют инструкцию SELECT, вложенную в инструкцию SELECT, SELECT...INTO, INSERT...INTO, DELETE, UPDATE или в другой подчиненный запрос.
Синтаксис
Подчиненный запрос создается одним из трех способов:
· сравнение [ANY | ALL | SOME] (инструкцияSQL)
· выражение [NOT] IN (инструкцияSQL)
[NOT] EXISTS (инструкцияSQL)
Элемент | Описание |
сравнение | Выражение и оператор сравнения, который сравнивает выражение с результатами подчиненного запроса. |
выражение | Выражение, для которого проводится поиск в результирующем наборе записей подчиненного запроса. |
инструкцияSQL | Инструкция SELECT, которая соответствует формату и всем правилам, принятым для инструкций SELECT. Она должна быть заключена в круглые скобки. |
Дополнительные сведения
Подчиненный запрос можно использовать вместо выражения в списке полей инструкции SELECT или в предложениях WHERE и HAVING.
Инструкция SELECT используется в подчиненном запросе для задания набора конкретных значений, вычисляемых в выражениях предложений WHERE или HAVING.
Пример синтаксиса подзапроса
SELECT имена полей
FROM имена таблиц
WHERE поле сравнение ( SELECT имена полей
FROM имена таблиц
[WHERE….]
……………………..; )
Варианты работы подзапроса
· подзапрос возвращает одно значение
· подзапрос возвращает не одно значение
Использование подзапросов возвращающих одно значение
ПримерВывести фамилии сотрудников подразделения, оклад которых ниже среднего в подразделении.
SELECT Фамилия
FROM Подразделение
WHERE Оклад < ( SELECT avg (Оклад)
FROM Подразделение) ;
Использование подзапросов возвращающих несколько значений
В этом случае необходимо использовать предикаты ANY(SOME), ALL, IN.
1. Предикаты ANY или SOME, являющиеся синонимами, используются для отбора записей в главном запросе, которые удовлетворяют сравнению хотя бы с одним значением из всех отобранных в подчиненном запросе.
Пример Отбираются все товары, цена которых больше, чем ценахотя бы одного товара, проданного со скидкой в 25 процентов или более:
SELECT *
FROM Товары
WHERE Цена > ANY (SELECT Цена
FROM Заказано
WHERE Скидка >= 0.25);
2.Предикат ALLиспользуется для отбора в главном запросе только тех записей, которые удовлетворяют сравнению со всеми записями, отобранными в подчиненном запросе.
Если в предыдущем примере предикат ANY заменить предикатом ALL, результат запроса будет включать только те товары, чья цена больше, чем цена всех товаров, проданных со скидкой 25% или более. Это условие является значительно более жестким.
3.Предикат IN используется для отбора в главном запросе только тех записей, которые содержат значения, совпадающие (равно) с одним из отобранных подчиненным запросом.
Пример Показать все товары, проданные со скидкой, большей или равной 25 процентам:
SELECT *
FROM Товары
Дата добавления: 2016-05-25; просмотров: 1247;