Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access_LR_2.doc
Скачиваний:
26
Добавлен:
15.04.2015
Размер:
339.97 Кб
Скачать

Группировка данных

При выполнении запросов с использованием агрегатных функций возникает необходимость группировать некоторые поля. Это выполняется с помощью директивы GROUP BY (Группировать по…).

Пример 12. Определить суммарное количество туристов, обслуженных каждой фирмой.

SELECT КодФирмы, SUM(Колич) AS [Всего туристов]

FROM ТУРЫ

GROUP BY КодФирмы

При использовании лишь одной таблицы ТУРЫ нельзя вывести название фирм и придется удовлетвориться их кодами.

При выполнении запроса с использованием агрегатных функций часто возникает необходимость вывести только часть результатов, отвечающих какому-либо критерию. Это осуществляется с помощью директивы HAVING, за которой следует условие, по которому формируются итоги.

Пример 13. Вывести сведения об общем количестве туристов и средней стоимости тура только тех фирм, у которых общее количество туристов превысило 50 человек.

SELECT КодФирмы,

AVG(Цена) AS [Средняя цена],

SUM(Колич) AS [Всего туристов]

FROM ТУРЫ

GROUP BY КодФирмы

HAVING SUM(Колич) > 50

Вычисления в запросах

В запрос можно ввести вычисляемое поле, то есть такое поле, значение которого формируется как результат вычислений на основе значений других полей запроса.

Для формирования арифметических выражений используются операции умножения (*), деления (/), сложения (+), вычитания (-).

Пример 14. Вывести сведения об общей сумме, уплаченной туристами в каждом туре.

SELECT *, Цена*Колич AS [Выручка]

FROM ТУРЫ

Вычисляемое поле получает имя «Выручка», значение этого поля получается по формуле

Цена Колич.

Здесь кроме выручки выведутся и все сведения из таблицы ТУРЫ.

Вывод данных из нескольких таблиц

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

Пример 15. Вывести сведения обо всех турах таким образом, чтобы в запрос выводилось название фирмы, а не код.

Напрашивается следующий вариант запроса:

SELECT Дата, Фирма, Колич, Цена FROM ФИРМЫ, ТУРЫ

Если теперь исполнить этот запрос, то вместо ожидаемых 15 строк увидим 60! Дело в том, что SQL не признает связей между таблицами, установленных ранее.

Для любознательных.

При использовании в качестве источника данных сразу нескольких таблиц производится их объединение на основе декартова произведения, то есть каждая запись каждой таблицы комбинируется с каждой записью всех остальных таблиц. В итоге общее количество записей (строк) равно произведению количества строк всех таблиц, участвующих в запросе. В нашем примере это 4  15 = 60.

Приведем лишь один из возможных вариантов одновременной работы с несколькими таблицами – это использование инструкции WHERE.

Итак, еще раз пример 15.

SELECT ТУРЫ.Дата, ФИРМЫ.Фирма, ТУРЫ.Колич, ТУРЫ.Цена

FROM ФИРМЫ, ТУРЫ

WHERE ТУРЫ.КодФирмы = ФИРМЫ.КодФирмы

Обратим внимание на следующее:

  1. Поскольку мы работаем с несколькими таблицами, то для однозначной идентификации полей следует указывать сначала имя таблицы и через точку  имя поля, например, ТУРЫ.КодФир-

мы. Пробелы слева и справа от точки в таких составных именах ставить нельзя.

  1. В условии отбора указываем, что нужно выбрать только те записи, в которых значение поля КодФирмы в обеих таблицах (ТУРЫ и ФИРМЫ) совпадает.

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