Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен БДиСУБД.doc
Скачиваний:
17
Добавлен:
25.11.2018
Размер:
583.17 Кб
Скачать

18. Опишите назначение ключевых слов group by, having, order by оператора select. Приведите примеры использования указанных ключевых слов.

Предложение GROUP BY используется для определения групп выходных строк, к которым могут применяться агрегатные функции (COUNT, MIN, MAX, AVG и SUM). Если это предложение отсутствует, и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT, должны быть включены в агрегатные функции, и эти функции будут применяться ко всему набору строк, которые удовлетворяют предикату (условию) запроса. В противном случае все столбцы списка SELECT, не вошедшие в агрегатные функции, должны быть указаны в предложении GROUP BY. В результате чего все выходные строки запроса разбиваются на группы, характеризуемые одинаковыми комбинациями значений в этих столбцах. После чего к каждой группе будут применены агрегатные функции. Следует иметь в виду, что для GROUP BY все значения NULL трактуются как равные, то есть при группировке по полю, содержащему NULL-значения, все такие строки попадут в одну группу.

Если при наличии предложения GROUP BY, в предложении SELECT отсутствуют агрегатные функции, то запрос просто вернет по одной строке из каждой группы. Эту возможность, наряду с ключевым словом DISTINCT, можно использовать для исключения дубликатов строк в результирующем наборе.

Например дано отношение Книги

Наз_книги

Автор

Издательство

Цена

Архитектура компьютера

Таненбаум Э. С.

Питер

21700

Война и мир

Толстой Л.Н.

Беларусь

79560

Компьютерные сети

Таненбаум Э. С.

Питер

30890

Воскресение

Толстой Л.Н.

Наука и техника

26000

Анна Каренина

Толстой Л.Н.

Беларусь

24680

И требуется подсчитать количество книг одного автора. Получим запрос

SELECT Автор, COUNT(Автор) AS [Кол-во книг]

FROM Книги

GROUP BY Автор;

Результатом которого будет отношение

Автор

Кол-во книг

Таненбаум Э. С.

2

Толстой Л.Н.

3

Предложение HAVING — необязательный параметр оператора SELECT для указания условия на результат агрегатных функций (MAX, SUM, AVG, …). Эта предложение включается в запрос лишь при наличии предложение GROUP BY.

HAVING <условия> аналогичен WHERE <условия> за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов указанных в GROUP BY и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY. Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения. Распространённая ошибка — указание в SELECT столбца, пропущенного в GROUP BY.

Например, запрос

SELECT Издательство, SUM(Цена) AS Сумма

FROM Книги

GROUP BY Издательство

HAVING SUM(Цена) > 36000;

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

Предложение ORDER BY сортирует записи, полученные в результате запроса, в порядке возрастания (ASC) или убывания (DESC) в соответствии со значениям выбранных столбцов.

Синтаксис: ORDER BY столбец_1 [ASC | DESC] [, столбец_2 [ASC | DESC]][, ...].

Если предложение ORDER BY содержит несколько атрибутов, то сначала строки сортируются по первому атрибуту. Затем строки, имеющие совпадающие значения в первом атрибуте, сортируются по второму атрибуту и т. д. По умолчанию используется порядок сортировки по возрастанию (от «A» до «Я» и от 0 до 9). Предложение ORDER BY не является обязательным. Кроме того, в список ORDER BY можно включать не только имя столбца, но и его порядковую позицию в перечне SELECT.

Например, требуется вывести отношение Книги, так чтобы авторы стояли в алфавитном порядке, а название их книг в обратном порядке, т.е. получим запрос

SELECT *

FROM Книги

ORDER BY Автор ASC, Наз_книги DESC;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]