3. Вычисления внутри select.
SQLпозволяет выполнять различные арифметические операции над столбцами результирующего отношения. В конструкции<список_выбора>можно использовать константы, функции и их комбинации с арифметическими операциями и скобками. Например, чтобы узнать, сколько лет прошло с 1992 года (год принятия стандарта SQL-92) до публикации той или иной книги можно выполнить команду:
SELECT title, yearpub-1992 FROM titles WHERE yearpub > 1992;
В арифметических выражениях допускаются операции сложения (+), вычитания (-),
деления (/), умножения (*), а также различные функции (COS, SIN, ABS –
абсолютное значение и т.д.).
В SQLтакже определены так называемые агрегатные функции, которые совершают действия над совокупностью одинаковых полей в группе записей. Среди них:
AVG(<имя поля>)- среднее по всем значениям данного поля
COUNT(<имя поля>)илиCOUNT (*)- число записей
MAX(<имя поля>)- максимальное из всех значений данного поля
MIN(<имя поля>)- минимальное из всех значений данного поля
SUM(<имя поля>)- сумма всех значений данного поля
Следует учитывать, что каждая агрегирующая функция возвращает единственное значение.
Примеры: определить дату публикации самой "древней" книги в нашей базе данных
SELECT MIN(yearpub) FROM titles;
подсчитать количество книг в нашей базе данных:
SELECT COUNT(*) FROM titles;
Область действия данных функции можно ограничить с помощью логического условия. Например, количество книг, выпущенных после 2000 года:
SELECT COUNT(*) FROM titles WHERE yearpub > 2000;
4. Функции для работы с датой
В MS Access предусмотрен целый набор встроенных функций дат и времени Перечислим некоторые из них:
Date() -текущая дата, т е сегодняшнее число, месяц и год;
Dау(дата) -извлекает из даты день, например дата - 12,09,97,результат применения функции –число12;
Моnth(дата) -извлекает из даты месяц, например дата - 12,09,97,результат применения функции -число 9;
Уеаг(дата) -извлекает из даты год, например дата - 12-09,97,результат применения функции -число 97;
Weekday(дата) -извлекает из даты день недели в американской системе нумерации дней, а именно в примере -дата 12,09,97,результат применения функции - число 6,что соответствует пятнице,
DatePart(HHTepBan, дата) -здесь аргумент "интервал" -это сокращенное название нужного компонента даты, а дата -конкретное значение даты или имя поля с датой
Например:
DatePart("H",#12,09,97#) - день недели - 6, т е пятница,
DatePart("HH",#12,09,97#) - неделя года - 37,
DatePart("K",# 12,09,97#) - квартал года - 3
DatePart("a",#12,09,97#) - день -12,
DatePart("M",#12,09,97#) - месяц - 9, \ DatePart("rrrr",#12,09,97#) - год -1997
Пример запроса. Определить, сколько лет прошло с момента выхода статьи описавшей стандарт SQL (предположим, что название статьи ”СтандартSQL”)
SELECT Month(Date()-yearpub)
FROM titles INNER JOIN publishers ON
titles.pub_id = publishers.pub_id
WHERE publisher = "Стандарт SQL";
5. Задание к лабораторной работе
Замечания по ходу выполнения лабораторной работы.
Для просмотра результата выполнения запросов необходимо чтобы в таблицах были внесены данные соответствующими сформулированным запросам. При этом данные в запросах (даты, фамилии, количество и т.п.) могут быть изменены по факту внесенных данных в БД.
При выполнении заданий лабораторной работы все вычисляемые поля заменять синонимами, используя опцию AS в предложении SELECT.
Например: SELECT COUNT(*) AS Количество_строк FROM titles;
Реализовать следующие запросы средствами SQL:
Найти заказы сделанные в январе.
Найти изделия, которые поставляются в количестве не меньше 10, и не больше 100.
Получить список изделий получаемых заказчиком “з-д «Красный луч»”, цена которых более 50 тыс. грн.
Сколько деталей «Болт» по всем заказам получил заказчик “з-д «Красный луч»”.
Определить наименования деталей заказанных в период с 6/10/97 по 10/10/97, которые не заказывал з-д «Красный луч».
Получить список наименований изделий, поставки которых превышают 10 тыс.
На какую сумму заказано деталей з-дом «Красный луч»
Какие заказчики заказывали деталь «Болт».
Определить среднее количество поставок детали «Болт» за 1997 год.
Найти заказчика, заказавшего самую дорогую деталь.
