ГЛАВА 23. Упорядоченные и агрегатные наборы.
ГЛАВА 23. Упорядоченные и агрегатные наборы.
В этой главе мы рассмотрим синтаксис и правила задания запросов, которые выводят упорядоченные и сгруппированные наборы.
Наборы, заданные оператором SET, по умолчанию читаются в произвольном порядке. Часто, особенно при отображении данных для пользователя или при печати отчетов, вам нужен определенный вид сортировки. Ясно, что список телефонов будет более полезным, если фамилии будут находиться в алфавитном порядке. Группы чисел по продажам или тестовые результаты более понятны, если они упорядочены, сгруппированы и просуммированы. В SQL существует два предложения по заданию формирования выходных наборов.
Предложение ORDER BY используется для сортировки наборов в возрастающем или убывающем порядке по одному или большему количеству столбцов. Предложение GROUP BY может разделять набор на вложенные группы, или уровни, в соответствии со столбцами из списка SELECT и (по желанию) выполняя агрегатные вычисления на множестве числовых столбцов в границах группы.
Обсуждение сортировки
Хотя упорядочение и агрегирование являются операциями с различными результатами, на некотором уровне они взаимодействуют, когда обе используются в запросе и расположение их предложений является важным. Внутри системы они применяют некоторые общие характеристики в отношении формирования промежуточных наборов и использования индексов.
Задание порядка в предложениях сортировки
Следующая упрощенная структура синтаксиса оператора SELECT показывает позицию предложений ORDER BY и GROUP BY В спецификациях упорядочения или группирования. Оба предложения являются необязательными и оба могут присутствовать в операторе:
SELECT [FIRST m] [SKIP N] | [DISTINCT | ALL ]
{<список-столбцов>}
FROM <спецификация-таблицы>
[WHERE <условие-поиска>]
[GROUP BY <элемент-группировки> [COLLATE последовательность-сортировки]
[, <элемент-группировки> [COLLATE последовательность-сортировки ]...]
[HAVING <условие-поиска>]
[UNION [ALL] <выражение-выбора>]
[PLAN <выражение-плана>]
[ORDER BY <список-сортируемых-элементов>]
[FOR UPDATE [OF столбец [,столбец ...]] [WITH LOCK]];