Неотъемлемой частью СУБД является математическое обеспечение, которое представляет совокупность математических методов, моделей и алгоритмов для реализации целей и задач баз данных. В связи с этим является актуальным изучение применение математических функций к построению запросов к базе данных.
Для практической реализации запросов создадим тестовую четырехтабличную базу данных «Заказы Arduino» (рис. 1).
Рис. 1. Схема данных
Для заполнения таблиц данными создадим четыре формы: «Заказы» (рис. 2.), «Клиентская_база» (рис. 3.), «Устройства_ARDUINO» (рис. 4.) и «Характеристики» (рис. 5).
Рис. 2. Форма таблицы «Заказы»
Рис. 3. Форма таблицы «Клиентская_база»
Рис. 4. Форма таблицы «Устройства_ARDUINO»
Рис. 5. Форма таблицы «Характеристики»
На примере работы с созданной базой данных покажем реализацию различных типов запросы для отбора необходимой информации и место математических функций в создании таких запросов.
Математические запросы (запросы с итогами)Пример 1.Максимум значений. Вывести максимальное количество заказов из таблицы «Заказы».
SELECT MAX([Кол-во]) AS Макс_количество
FROM Заказы;
Пример 2. Минимум значений. Вывести минимальное количество заказов из таблицы «Заказы».
SELECT MIN([Кол-во]) AS Мин_количество
FROM Заказы;
Пример 3. Сортировка значений по порядку.Вывести три самых ранних по дате заказа.
SELECTTOP 3 *
FROMЗаказы
WHERE [Дата_заказа] IS NOT NULL
ORDERBY [Дата_заказа];
Пример 4. Сортировка значений по порядку. Вывести три самых поздних по дате заказа.
SELECT TOP 3 *
FROM Заказы
WHERE [Дата_выдачи] IS NOT NULL
ORDER BY [Дата_выдачи] DESC;
Пример 5. Сумма значений. Вывести общее количество заказов.
SELECT SUM([Кол-во]) AS Общее_количество
FROM Заказы;
Пример 6. Среднее значение. Вывести среднее количество заказов.
SELECT AVG([Кол-во])
FROM Заказы;
Запрос с параметромПример 1. Расчёт стоимости заказа с учётом стоимости доставки
SELECT Заказы.Клиент, Заказы.Товар, Устройства_ARDUINO.Цена, Заказы.[Кол-во], Цена*[Кол-во] AS Первоначальная_стоимость, Стоимость_доставки, Первоначальная_стоимость+Стоимость_доставки AS Окончательная_стоимость
FROM Устройства_ARDUINO INNER JOIN Заказы ON Устройства_ARDUINO.[№ по порядку] = Заказы.Товар;
Пример 2. Расчёт стоимости заказа по вводимой скидке.
SELECT Заказы.Клиент, Заказы.Товар, Устройства_ARDUINO.Цена, Заказы.[Кол-во], Цена*[Кол-во] AS Первоначальная_стоимость, Скидка, (Первоначальная_стоимость*Скидка)/100 AS Окончательная_стоимость
FROM Устройства_ARDUINO INNER JOIN Заказы ON Устройства_ARDUINO.[№ по порядку] = Заказы.Товар;
Перекрёстный запросПример 1. Вывод номера самого раннего заказа
TRANSFORM Min(Заказы.Код) AS [Min-Код]
SELECT Заказы.Клиент, Min(Заказы.Код) AS [Итоговое значение Код]
FROM Заказы
GROUP BY Заказы.Клиент
PIVOT Заказы.Товар;
Пример 2. Расчёт количества дней между датой заказа и датой выдачи
TRANSFORM Дата_выдачи-Дата_заказа AS [Кол-во дней]
SELECT Заказы.Клиент, Заказы.Дата_заказа, Заказы.Дата_выдачи
FROM Заказы
GROUP BY Заказы.Клиент, Заказы.Дата_заказа, Заказы.Дата_выдачи
PIVOT Заказы.Код;
Рекурсивный (иерархический) запрос.Пример 1. Совмещение даты заказа с датой выдачи. Вывести заказы, у которых даты заказа и даты выдачи совпадают.
SELECT Заказы.Код, Заказы.Клиент, Заказы.Дата_заказа, Заказы_1.Дата_выдачи AS Дата_выдачи_1, Заказы_1.Клиент AS Клиент_1, Заказы_1.Код AS Код_1
FROM Заказы INNER JOIN Заказы AS Заказы_1 ON Заказы.Дата_заказа = Заказы_1.Дата_выдачи;
Пример 2. Совмещение дат заказа и дат выдачи двух разных заказов
SELECT Заказы.Клиент, Заказы.Дата_заказа, Заказы.Дата_выдачи, Заказы_1.Клиент AS Клиент_1, Заказы_1.Дата_заказа AS Дата_заказа_1, Заказы_1.Дата_выдачи AS Дата_выдачи_1
FROM Заказы INNER JOIN Заказы AS Заказы_1 ON (Заказы.Дата_выдачи = Заказы_1.Дата_выдачи) AND (Заказы.Дата_заказа = Заказы_1.Дата_заказа)
WHERE ((Заказы.Клиент) NotIn (Заказы_1.Клиент));
На основе приведённых примеров можно выделить следующие особенности применения математических функций к запросам к базам данных:
запросы можно реализовывать в режиме SQL и конструктор;
в запросах с итогами есть как часто используемые функции (SUM, AVG), так и редкие, используемые в исключительных случаях (COS, ABS);
запросы с параметрами используются при наличии изменяемых значений;
перекрёстные запросы выводят все используемые в сравнении значения, поэтому являются самыми наглядными;
рекурсивные запросы используются для сравнения значений таблиц баз данных между собой.
Бобцов А. А, Шнегин В.В. Банки и базы данных. Основы работы с MSAccess. – СПб.: Питер, 2005. 23 с.
БоровиковВ. В. MicrosoftAccess 2010. Программирование и разработка баз данных и приложений. – М.: Солорон-Р, 2010. 68 с.
Введение в реляционные базы данных данных. Учебный курс. [Электронный ресурс] – URL: htpp://www.intuit.ru (дата обращения: 01.04.2014).
Виды запросов к базе данных [Электронный ресурс]. URL: https://studfiles.net/preview/2824415/
ДейтК.Дж. Введение в системы баз данных, 7-е издание. М.: Вильямс, 2002. 82 с.
Запросы в MSAccess [Электронный ресурс]. URL: https://accesshelp.ru/zaprosy-v-access/
Коннолли Т. Б. Базы Данных. Проектирование, реализация и сопровождение. Теория и практика. 3-е издание. – М.:Вильямс, 2003. 53 с.
Малыхина М. П. Базы данных: основы, проектирование, использование. – СПб.: БХВ-Петербург, 2004. 23 с.
Рекурсивная функция [Электронный ресурс]. URL: http://www.studfiles.ru/preview/2428909/
Рекурсия. Основные определения. [Электронный ресурс]. URL: http://www.studfiles.ru/preview/1877393/