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