Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольные для управления данными / для типографии методическое пособие по БД.doc
Скачиваний:
97
Добавлен:
20.02.2016
Размер:
670.72 Кб
Скачать
      1. 5.1.4 Группировка записей

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

Пример. Показать количество продаж по каждому типу товара.

SELECT Товары.ТипТовара, Sum(Заказ.Количества) AS [Общее Количество]

FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара

GROUP BY Товары.ТипТовара;

Рисунок 5 - Пример запроса с группировкой данных

      1. 5.1.5 Ограничение на группировку записей

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

Предложение HAVING работает аналогично предложению WHERE, но применяется не к строкам, а к группам строк. Предложение HAVING накладывает условие на полученные группы. Если HAVING использует несколько условий, то они соединяются оператором OR или AND.

Пример. Показать количество продаж по каждому типу товара, если количество продаж не превышает 1000.

SELECT Товары.ТипТовара, Sum(Заказ.Количества) AS [Общее Количество]

FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара

GROUP BY Товары.ТипТовара

HAVING Sum(Заказ.Количества)<1000;

Рисунок 6 - Пример запроса с группировкой данных и использованием предложения HAVING

    1. 5.2 Объединение однотипных запросов

При необходимости объединения нескольких однотипных результирующих наборов данных используют оператор UNION.

Пример. Показать цену товаров и цену товаров со скидкой. Скидка на товары, цена которых > 100 р. – 3%, остальных – 5%.

SELECT Товары.КодТовара, Товары.ТипТовара, Товары.МаркаТовара, Товары.Цена, [Товары]![Цена]*0.03 AS [Цена со скидкой]

FROM Товары

WHERE Товары.Цена>100

UNION

SELECT Товары.КодТовара, Товары.ТипТовара, Товары.МаркаТовара, Товары.Цена, [Товары]![Цена]*0.05 AS [Цена со скидкой]

FROM Товары

WHERE Товары.Цена<=100;

    1. 5.3 Структурированные, или вложенные, запросы

Подзапрос, или вложенный запрос, – дополнительный метод манипуляции данными на основе нескольких таблиц. Подзапрос – оператор SELECT, вложенный в:

  • предложение SELECT;

  • предложение WHERE;

  • предложение HAVING;

  • оператор INSERT;

  • оператор UPDATE;

  • оператор DELETE.

Пример синтаксиса подзапроса, вложенного в предложение SELECT.

Select <список полей>

From<список таблиц>

Where<условия выборки строк>

(Select <список полей>

From<список таблиц>

Where<условия выборки строк>)

Пример. Найти покупателя самого большого заказа.

SELECT Заказ.НазваниеКомпании, Заказ.СтоимостьДоставки + Заказ.Количества * Товары.Цена AS [Стоимость заказа]

FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара

WHERE Заказ.СтоимостьДоставки+Заказ.Количества*Товары.Цена=

(SELECT MAX( Заказ.СтоимостьДоставки + Заказ.Количества * Товары.Цена) AS [Стоимость заказа]

FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара);

    1. 5.4 Запросы на удаление

Оператор DELETE предназначен для удаления группы записей из объекта. Удаляются все записи из объекта, удовлетворяющие условию поиска. Если опустить WHERE <условия поиска>, из объекта будут удалены все записи.

Формат оператора DELETE:

DELETE FROM <объект>

[Where<условия поиска>]

Пример. Удалить все счета за прошлый год.

DELETE *

FROM Счет

WHERE Счет.ДатаСчета Like "*.*.2005";

В запросах на удаление возможно использование подзапросов.