Примеры запросов и создания таблиц SQL. Часть 2

Задание 9.
Вывести средний и общий объём продаж книг по типу бизнеса. Задание 10. Вывести идентификаторы авторов c количеством написанных книг, в том числе и в соавторстве.

Фильтрация групп с помощью предложения HAVING

Очерёдность с которой СУБД применяет предложения WHERE, GROUP BY и HAVING имеет следующий вид:
1. Предложение WHERE фильтрует строки, которые являются результатом работы операций обозначенных предложениями FROM и JOIN.
2. Предложение GROUP BY группирует выход предложения WHERE.
3. Предложение HAVING фильтрует строки сгруппированного результата. Изменим предыдущий запрос следующим образом: "Найти авторов, которые написали не менее трёх книг". Необходимо добавить: HAVING COUNT(*)>=3
Задание 11. Перечислить для издателей P03 и P04 общий объём продаж, выпущенных книг с разбивкой по типам. Учесть только те книги, где итоговый объём продаж превышает 10000 копий при средней цене одной книги менее 20$.

Изменение таблиц

Соединение двух и более таблиц можно рассматривать как процесс сравнения данных в указанных столбцах этих таблиц и формирования новой таблицы из строк исходных таблиц, которые дают положительный результат при сравнении. Оператор JOIN сравнивает данные в указанных столбцах каждой таблицы строка за строкой и компонует из строк прошедших сравнение новые строки. Обычно в качестве операции сравнения выступает равенство, т.е. данные сравниваются на полное совпадение, но возможны и другие типы соединения. Имеется несколько разновидностей соединений:
1) соединения с равенством (экви-соединения);
2) естественные соединения (natural);
3) внешние соединения.
Наиболее часто встречающейся разновидностью соединений являются соединения основанные на равенстве.
Пример 1. Найти имена авторов и издателей, живущих в одном и том же городе. При выполнении соединения, сначала образуется декартово произведение таблиц, т.е. образование всех возможных комбинаций строк этих таблиц друг с другом. Декартово произведение не содержит какой-либо полезной информации, по этой причине соединение должно включать предложение WHERE, которое отбирает связанные между собой строки и указывает как именно они должны быть связанны. Условие соединение таблиц не обязательно является равенством. Можно использовать любую другую операцию сравнения.
Пример 2. Найти авторов, которые публиковались издательством New Age Books и которые живут в штатах названия которых больше, чем название штатов Массачусетс, в алфавитном порядке. Можно соединять между собой столбцы одной и той же таблицы с помощью самосоединения SELF-JOIN.
Пример 3. Найти авторов, живущих в городе Оукленде штата Калифорния в одном и том же почтовом округе.
Т.к. этот запрос включает столбцы одной таблиц автора, то эта таблица может выступить в двух ролях, чтобы различить эти роли, необходимо временно присвоить ей в предложении FROM различные названия, такие как au1, au2. Эти согласующиеся названия будут использоваться для уточнения названий столбцов в следующем запросе. Для уточнения необходимо добавить дополнительное условие.
Пример 4. Найти названия всех книг типа "Современная кулинария". и имена их авторов.

Комментарии

Популярные сообщения