Создание вложенных запросов

Для создания вложенных запросов необходимо выбрать пункт Добавить подзапрос контекстного меню узла Запрос (см. рис. 214). При этом в дереве появится узел подзапроса (рис. 221).

Создание подзапросов
Рисунок 221. Создание подзапросов

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

Для того чтобы подзапрос отображался на верхнем уровне как таблица, необходимо выставить флаг Использовать как таблицу (рис. 222).

Меню для подзапроса
Рисунок 222. Меню для подзапроса

Пример

Задача. В таблице AUTO содержится информация о модели машины, ее характеристиках, и ее владельце. Требуется получить список машин, имеющих мощность больше средней.

Решение. На первом этапе сформируем список мощностей так, чтобы они не повторялись. На втором этапе вычислим среднее арифметическое. На последнем этапе выберем информацию о машинах, имеющих мощность больше средней.

Для этого добавляем в запрос таблицу AUTO, перетаскиваем в редактор столбцов MAKE, MODEL и HORSEPWR. В запросе создадим подзапрос, а в нем еще один.

В самый внутренний подзапрос поставим таблицу AUTO и в список столбцов вытащим столбец HORSEPWR. На этом столбце зададим операцию группировки. Просмотрим текст этого подзапроса. Должно получиться следующее:

SELECT "AUTO_1"."HORSEPWR" AS "HORSEPWR"
  FROM "SYSTEM"."AUTO" AS "AUTO_1"
 GROUP BY "AUTO_1"."HORSEPWR"

Установим для этого подзапроса флаг Использовать как таблицу. Первый этап выполнен.

В подзапросе первой вложенности перетащим HORSEPWR в редактор столбцов. В качестве выражения установим avg("Подзапрос 11"."HORSEPWR"). Значение поля Группировка установим равным Выражения. В тексте должно получиться следующее:

SELECT AVG("Подзапрос 11"."HORSEPWR") AS "HORSEPWR"
  FROM (SELECT "AUTO_1"."HORSEPWR" AS "HORSEPWR" FROM "SYSTEM"."AUTO" AS "AUTO_1"
 GROUP BY "AUTO_1"."HORSEPWR") AS "Подзапрос 11"

Установим для этого подзапроса флаг Использовать как таблицу. Второй этап выполнен.

Перейдем к главному запросу. Для столбца HORSEPWR выставим поле Группировка равным Условия, а поле Условия равным  >"Подзапрос 1"."HORSEPWR" (рис. 223).

Корневой запрос
Рисунок 223. Корневой запрос

Третий этап выполнен. Для проверки просмотрим текст запроса. Должно получиться следующее:

SELECT "AUTO"."MAKE" AS "MAKE", "AUTO"."MODEL" AS "MODEL", "AUTO"."HORSEPWR" AS "HORSEPWR"
  FROM "SYSTEM"."AUTO" AS "AUTO" ,
       (SELECT AVG("Подзапрос 11"."HORSEPWR") AS "HORSEPWR"
          FROM (SELECT "AUTO_1"."HORSEPWR" AS "HORSEPWR"
                  FROM "SYSTEM"."AUTO" AS "AUTO_1"
                 GROUP BY "AUTO_1"."HORSEPWR") AS "Подзапрос 11"
        ) AS "Подзапрос 1"
 WHERE ("AUTO"."HORSEPWR"  > "Подзапрос 1"."HORSEPWR")

Теперь можно просмотреть результат запроса (рис. 224).

Результат запроса
Рисунок 224. Результат запроса