- •Домашнее задание для подготовки к зачету.
- •Создание файла базы данных
- •Создание структуры таблиц Создание структуры таблицы страны
- •Создание структуры таблицы фирмы
- •Создание структуры таблицы туры
- •Связывание таблиц (создание схемы данных)
- •Заполнение таблиц Для ввода данных в таблицу страны необходимо:
- •Формирование запросов в режиме конструктора
- •Формирование запросов на языке sql
- •Group by КодФирмы Конструирование формы
- •Конструирование отчета
- •Создание запросов на языке sql
- •Создание запроса на языке sql в субд Аccess
- •Редактирование запроса
- •Извлечение информации из таблиц
- •Вывод записей в нужном порядке
- •Выбор записей, удовлетворяющих условию отбора
- •Использование агрегатных функций
- •Группировка данных
- •Вычисления в запросах
- •Вывод данных из нескольких таблиц
Группировка данных
При выполнении запросов с использованием агрегатных функций возникает необходимость группировать некоторые поля. Это выполняется с помощью директивы 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 ТУРЫ.КодФирмы = ФИРМЫ.КодФирмы
Обратим внимание на следующее:
Поскольку мы работаем с несколькими таблицами, то для однозначной идентификации полей следует указывать сначала имя таблицы и через точку имя поля, например, ТУРЫ.КодФир-
мы. Пробелы слева и справа от точки в таких составных именах ставить нельзя.
В условии отбора указываем, что нужно выбрать только те записи, в которых значение поля КодФирмы в обеих таблицах (ТУРЫ и ФИРМЫ) совпадает.