logo
Лаб

2.5. Подчиненные (сложные) запросы

Как уже отмечалось, источником данных для запросов мо­гут быть результаты выполнения других запросов. Возможны два варианта построения таких запросов. Первый вариант реализуется через указание в SQL-инст­рукциях в качестве имен таблиц и имен полей имен запросов и полей запросов. Синтаксис таких запросов ничем не отличает­ся от обычных запросов, а его исполнение осуществляется в две фазы. По запуску основного запроса сначала неявно запус­кается запрос, формирующий источник данных, и по заверше­нию его исполнения запускается основной (внешний) запрос. Второй вариант реализуется через включение в тело внеш­ней (главной) SQL-инструкции внутренней инструкции SELECT. При этом результат исполнения внутренней инструкции SELECT используется для формирования условия отбора записей в главном (внешнем) запросе или в качестве выраже­ния для нового вычисляемого поля. Такие запросы называются подчиненными.

Использование внутренней инструкции SELECT для фор­мирования условий отбора записей во внешнем запросе возмож­но, например, через предикаты сравнения «для некоторых/для всех» — ANY, SOME, ALL.

Конструкция запроса может выглядеть следующим образом:

SELECT ...FROM... WHERE Выражение () [ANY|SOME|ALL] (SELECT...),

где () — оператор сравнения.

Как правило, выражение включает поле из списка полей внешней SQL-инструкции или функцию от этих полей. Внут­ренняя инструкция SELECT должна возвращать набор данных по одному полю или по вычисляемому полю, при принципи­альной сравнимости с выражением во внешней SQL-инструк­ции (по типу данных).

Предикаты ANY и SOME («для некоторых»), являющие­ся синонимами, используются для отбора в главной SQL-инст­рукции тех записей, которые удовлетворяют сравнению с ка­кой-либо записью (т.е. хотя бы с одной), из отобранных во внут­ренней инструкции SELECT.

Предикат ALL (для всех) используется для отбора в глав­ном запросе только тех записей, которые удовлетворяют сравнению одновременно со всеми записями, отобранными в под­чиненном запросе (рисунке 2.9.).

Лабораторная работа № 4. Создайте таблицы с выбранными вами полями и сформируйте запросы, аналогичные изученным в данном разделе.