Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

4.3.4.Правила выполнения запросов с группировкой

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

  • константа;

  • агрегатная функция, возвращающая одно значение для всех строк, входящих в группу;

  • столбец группировки, который по определению имеет одно и то же значение во всех строках группы;

  • выражение, включающее в себя перечисленные выше элементы.

Запросы с группировкой и с условиями отбора групп выполняются следующим образом.

  1. Взять таблицу, указанную в предложении FROM.

  2. Если имеется предложение WHERE, применить заданное в нем условие отбора к каждой строке таблицы. Если при этом получается значение TRUE, то текущая строка добавляется в результирующую таблицу, если получается значение FALSE, то строка отбрасывается.

  3. Если имеется предложение GROUP BY, разделить строки таблицы таким образом, чтобы строки в каждой группе имели одинаковые значения в столбцах группировки (т. е. в столбцах, указанных за ключевым словом GROUP BY).

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

  5. Для каждой из оставшихся групп строк вычисляются значения агрегатных функций, указанных в предложении SELECT. При этом для каждой группы формируется одна строка, содержащая значения столбцов группировки и значения агрегатных функций, указанных в предложении SELECT.

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

В 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)

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]