Вложенные запросы

В SQL существует механизм вложенного запроса, позволяющий использовать результаты одного запроса в другом запросе. Этот механизм играет важную роль в SQL по следующим причинам:

– вложенные запросы соответствуют словесному описанию запроса и поэтому являются самым естественным способом выражения запроса;

– вложенные запросы позволяют структурировать запрос путем разбиения на части (на главный запрос и вложенные запросы);

– существуют ситуации, когда невозможно обойтись без вложенных запросов.

Вложенным называется запрос, содержащийся в предложении WHERE или HAVING другого запроса.

Рассмотрим следующую ситуацию. Требуется вывести список офисов, для которых плановый объем продаж (поле TARGET) превышает сумму плановых объемов продаж всех служащих (поле QUOTA).

Первая часть этого запроса должна выглядеть как

SELECT CITY

FROM OFFISY

WHERE TARGET >???

Во второй части заказа нужно ответить на вопрос: как определить сумму плановых объемов продаж служащих для отдельного офиса (скажем офиса с идентификатором 22).

Это можно сделать с помощью запроса, использующего агрегатную функцию SUM:

SELECT SUM(QUOTA)

FROM SLUZHASCHIE

WHERE ID_OFC = 22

А теперь объединим эти запросы путем замены знаков??? на второй запрос и получим следующий структурированный запрос

SELECT CITY

FROM OFFISY

WHERE TARGET > (SELECT SUM(QUOTA)

FROM SLUZHASCHIE

WHERE SLUZHASCHIE.ID_OFC = OFFISY.ID_OFC)

В приведенном запросе вложенный (внутренний) запрос выполняет для каждого офиса вычисление суммы плановых продаж всех служащих, работающих в данном офисе. Главный (внешний) запрос сравнивает плановый объем продаж офиса с вычисленной суммой и в зависимости от результата сравнения, либо добавляет текущую запись в результирующую, либо нет. В результате такой согласованной работы главный и вложенный запросы извлекают из базы данных требуемую информацию и формируют результирующую таблицу.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: