Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник EXCEL БД SQL.doc
Скачиваний:
2
Добавлен:
26.11.2018
Размер:
2.62 Mб
Скачать

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

WHERE КодТовара IN (SELECT КодТовара

FROM Заказано

WHERE Скидка >= 0.25);

И наоборот, предикат NOT IN используется для отбора в главном запросе только тех записей, которые содержат значения, не совпадающие ни с одним из отобранных подчиненным запросом.

Дополнительные возможности использования подзапросов.

Предикат EXISTS (с необязательным зарезервированным словом NOT ) используется в логическом выражении для определения того, должен ли подчиненный запрос возвращать какие-либо записи.

В подчиненном запросе можно использовать псевдонимы таблиц, перечисленные в предложении FROM, расположенном вне подчиненного запроса.

Пример Выдать список покупателей получивших товар со склада

SELECT П.Фамилия, П.Телефон

FROM Покупатели AS П

WHERE EXISTS (SELECT P.Фамилия

FROM Расход AS P

WHERE П.Фамилия = P.Фамилия);

Используемая литература

Шумаков П.В. Delphi и создание приложений Баз данных. Москва: Нолидж, 1998

Дейт К. Введение в системы баз данных. – Киев: Диалектика, 1998.

Дейт К. Руководство по реляционной СУБД DB2. – М.: Финансы и статистика, 1988.

Справочные данные по Microsoft Office

45