Строки результатов запроса, как и строки таблицы базы данных, не имеют определенного порядка. Но, включив в инструкцию SELECT
предложение ORDER BY
, можно отсортировать результаты запроса. Это предложение, синтаксическая диаграмма которого изображена на рис. 1, содержит список имен или порядковых номеров столбцов, разделенных запятыми. Например, результаты следующего запроса отсортированы по двум столбцам, REGION
и CITY
.
Показать фактические объемы продаж для каждого офиса, отсортированные в алфавитном порядке по регионам, а в каждом регионе — по городам.
SELECT CITY, REGION, SALES
FROM OFFICES
ORDER BY REGION, CITY;
CITY REGION SALES
------------ -------- ------------
Atlanta Eastern $367,911.00
Chicago Eastern $735,042.00
New York Eastern $692,637.00
Denver Western $186,042.00
Los Angeles Western $835,915.00
Рис. 1. Синтаксическая диаграмма предложения ORDER ВУ
Первый указанный в предложении ORDER BY
столбец (REGION
) является старшим ключом сортировки; столбцы, следующие за ним (в данном примере CITY
), являются младшими ключами, что позволяет сортировать строки результатов с одинаковыми старшими ключами. Предложение ORDER BY
позволяет выполнять сортировку в возрастающем или убывающем порядке, при этом сортируя результаты запроса по любому элементу списка возвращаемых столбцов.
По умолчанию данные сортируются в порядке возрастания. Чтобы сортировать их по убыванию, следует включить в предложение сортировки ключевое слово DESC
, как это сделано в следующем примере.
Вывести список офисов, отсортированный по фактическим объемам продаж в порядке убывания.
SELECT CITY, REGION, SALES
FROM OFFICES
ORDER BY SALES DESC;
CITY REGION SALES
------------ -------- ------------
Los Angeles Western $835,915.00
Chicago Eastern $735,042.00
New York Eastern $692,637.00
Atlanta Eastern $367,911.00
Denver Western $186,042.00
Как видно из рис. 13, чтобы определить порядок сортировки по возрастанию, необходимо использовать ключевое слово ASС
, однако из-за того, что этот порядок принят по умолчанию, ключевое слово ASС
обычно не указывают.
Если столбец результатов запроса, используемый для сортировки, является вычисляемым, то у него нет имени, которое можно указать в предложении сортировки. В таком случае вместо имени столбца необходимо указать его порядковый номер или повторить выражение в предложении ORDER BY
, как в приведенном далее примере. Использование номера столбца — более старый способ, который не рекомендуется к применению, как более подверженный ошибкам (например, при изменении порядка столбцов в предложении select
).
Вывести список всех офисов, отсортированный по разности между фактическим и плановым объемами продаж в порядке убывания.
SELECT CITY, REGION, (SALES - TARGET)
FROM OFFICES
ORDER BY 3 DESC;
или:
SELECT CITY, REGION, (SALES – TARGET)
FROM OFFICES
ORDER BY (SALES – TARGET) DESC;
CITY REGION (SALES-TARGET)
------------ -------- ---------------
New York Eastern $117,637.00
Los Angeles Western $110,915.00
Atlanta Eastern $17,911.00
Chicago Eastern –$64,958.00
Denver Western –$113,958.00
Полученные результаты запроса отсортированы по третьему столбцу, значения которого представляют собой разности между значениями столбцов SALES
и TARGET
для каждого офиса. Одновременно используя имена и номера столбцов, а также возрастающий и убывающий порядки сортировки, можно сортировать результаты запроса по достаточно сложному алгоритму, как это сделано в следующем примере.
Вывести список офисов, отсортированный в алфавитном порядке по названиям регионов, а в каждом регионе — по разности между фактическим и плановым объемами продаж в порядке убывания.
SELECT CITY, REGION, (SALES - TARGET)
FROM OFFICES
ORDER BY REGION ASC, 3 DESC;
CITY REGION (SALES-TARGET)
------------ -------- ---------------
New York Eastern $117,637.00
Atlanta Eastern $17,911.00
Chicago Eastern –$64,958.00
Los Angeles Western $110,915.00
Denver Western –$113,958.00
Стандарт SQL позволяет управлять порядком сортировки отдельных символов в наборе, что может оказаться очень важным при работе с локализованными наборами символов (например, можно указать порядок сортировки для диакритических символов) или для обеспечения переносимости между системами с таблицами кодировок ASCII и EBCDIC. Однако эта часть стандарта SQL очень сложна, и во многих реализациях SQL либо вообще игнорируются вопросы, связанные с порядком сортировки, либо используются собственные схемы для управления сортировкой.
Предыдущие статьи:
- Простейщие запросы SQL: оператор SELECT
- Вычисления в SQL запросах Select
- Выборка всех данных из таблицы
- SELECT DISTINCT - выборка уникальных значений
- WHERE: отбор по условию в операторе SELECT