Сортировка, оператор ORDER BY
При выполнении SELECT запроса, строки по умолчанию возвращаются в неопределённом порядке. Фактический порядок строк в этом случае зависит от плана соединения и сканирования, а также от порядка расположения данных на диске, поэтому полагаться на него нельзя. Для упорядочивания записей используется конструкция ORDER BY.
Общая структура запроса с оператором ORDER BY
SELECT поля_таблиц FROM наименование_таблицы WHERE ... ORDER BY столбец_1 [ASC | DESC][, столбец_n [ASC | DESC]]
Где ASC и DESC - направление сортировки:
- ASC - сортировка по возрастанию (по умолчанию)
- DESC - сортировка по убыванию
Например, выведем названия авиакомпаний в алфавитном порядке из таблицы Company:
SELECT name FROM Company ORDER BY name;
Сортировка по возрастанию и убыванию для основных типов
Сортировка по нескольким столбцам
Для сортировки результатов по двум или более столбцам их следует указывать через запятую.
...ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC];
Данные будут сортироваться по первому столбцу, но в случае если попадаются несколько записей с совпадающими значениями в первом столбце, то они сортируются по второму столбцу. Количество столбцов, по которым можно отсортировать, не ограничено.
Правило сортировки применяется только к тому столбцу, за которым оно следует.
ORDER BY столбец_1, столбец_2 DESC
не то же самое, что
ORDER BY столбец_1 DESC, столбец_2 DESC
Выведем информацию о полётах, отсортированную по городу вылета самолёта в порядке возрастания и по городу прибытия в аэропорт в порядке убывания, из таблицы Trip:
SELECT DISTINCT town_from, town_to FROM Trip ORDER BY town_from, town_to DESC;
В данном примере в начале записи сортируются по полю town_from. Затем отрабатывает обратная сортировка по полю town_to для групп строк, у которых в столбце town_from одинаковое значение.