Подчиненные запросы 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.