Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД-Лабораторные работы / БД-Практическая работа№10.docx
Скачиваний:
56
Добавлен:
04.06.2015
Размер:
37.45 Кб
Скачать

Функции без использования фразы group by

Если не используется фраза GROUP BY, то в перечень элементов_SЕLЕСТ можно включать лишь SQL-функции или выражения, содержащие такие функции. Другими словами, нельзя иметь в списке столбцы, не являющихся аргументами SQL-функций.

14. Вывести данные о количестве всех книг и количестве источников по информатике.

SЕLЕСТ Sum([Количество экземпляров]) AS [Суммарное количество], Count([Код книги]) AS Количество

FRОМ Книги

WHERE Книги.[Предметная область])="Информатика";

Просмотрите полученный результат. Сохраните запрос под именем S14.

Отметим также, что в столбце-аргументе перед применением любой функции, кроме COUNT(*), исключаются все неопределенные значения. Если оказывается, что аргумент - пустое множество, функция COUNT принимает значение 0, а остальные - NULL.

15. Получить среднюю цену книги по информатике, без функции AVG и с использованием функции AVG:

SЕLЕСТ (SUM([Стоимость книги])/Count([Стоимость книги])), AVG([Стоимость книги])

FRОМ Книги

WHERE [Предметная область] = "Информатика";

Доработайте запрос так, чтобы столбцы имели подписи Без AVG, AVG соответственно.

Просмотрите полученный результат. Сохраните запрос под именем S15.

Фраза group by

Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной во FRОМ таблицы по группам, каждая из которых имеет одинаковые значения в столбце, указанном в GROUP BY. Далее к каждой группе применяется фраза SЕLЕСТ. Каждое выражение в этой фразе должно принимать единственное значение для группы, т.е. оно может быть либо значением столбца, указанного в GROUP BY, либо арифметическим выражением, включающим это значение, либо константой, либо одной из SQL-функций, которая оперирует всеми значениями столбца в группе и сводит эти значения к единственному значению (например, к сумме).

16. Создать запрос, выводящий суммарное количество книг по каждой предметной области.

SЕLЕСТ [Предметная область], SUM([Количество экземпляров])

FRОМ Книги

GROUP BY [Предметная область];

Отметим, что фраза GROUP BY не предполагает ORDER BY.

17. Чтобы гарантировать упорядочение по предметной области результата рассматриваемого примера следует дать запрос

SЕLЕСТ [Предметная область], SUM([Количество экземпляров])

FRОМ Книги

GROUP BY [Предметная область]

ORDER BY [Предметная область];

Наконец, отметим, что строки таблицы можно группировать по любой комбинации ее столбцов.

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

SЕLЕСТ [Предметная область], [Вид печатной продукции], COUNT([Код книги])

FRОМ Книги

GROUP BY [Предметная область], [Вид печатной продукции];

Если в запросе используются фразы WHERE и GROUP BY, то строки, не удовлетворяющие фразе WHERE, исключаются до выполнения группирования.

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

SЕLЕСТ [Предметная область], SUМ ([Количество экземпляров])

FRОМ Книги

WHERE [Предметная область] <>”Психология”

GRОUР ВY [Предметная область];

Использование фразы HAVING

Фраза HAVING играет такую же роль для групп, что и фраза WHERE для строк: она используется для исключения групп, точно так же, как WHERE используется для исключения строк. Эта фраза включается в предложение лишь при наличии фразы GROUP BY, а выражение в HAVING должно принимать единственное значение для группы.

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

SЕLЕСТ Книги.[Предметная область], Count(Книги.[Код книги])

FRОМ Книги

GROUP BY Книги.[Предметная область]

HAVING ((Count(Книги.[Код книги]))<2);

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

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

21. Создайте запрос, выводящий название издательства и названия, выпущенных ими книг с указанием предметной области.

SЕLЕСТ [Название], [Название книги], [Предметная область]

FRОМ Издательства, Книги

Просмотрите полученные результаты.

В результате запроса было выполнено декартово произведение записей двух таблиц. Доработайте запрос, таким образом, чтобы коды издательств обоих таблиц совпадали.

SЕLЕСТ [Название], [Название книги], [Предметная область]

FRОМ Издательства, Книги

WHERE ([Издательства].[Код издательства]=[Книги].[Код издательства]);