Урок доступен в видеоформате 

Сортировка, оператор ORDER BY

При выполнении SELECT запроса, строки по умолчанию возвращаются в неопределённом порядке. Фактический порядок строк в этом случае зависит от плана соединения и сканирования, а также от порядка расположения данных на диске, поэтому полагаться на него нельзя. Для упорядочивания записей используется конструкция ORDER BY.

Общая структура запроса с оператором ORDER BY

MySQL 8.4
SELECT поля_таблиц FROM имя_таблицы
[WHERE условие]
ORDER BY столбец [ASC | DESC] [, ...];
  • [ ]необязательная часть
  • a | bодин из вариантов
  • ...можно повторить
поля_таблиц
Столбцы, которые попадут в результат.
имя_таблицы
Таблица, из которой выбираются данные.
условие

Какие строки отобрать перед сортировкой.

Необязательный
столбец

Столбец, по значениям которого упорядочиваются строки. Можно указать несколько столбцов через запятую.

ASC | DESC

Направление сортировки: ASC — по возрастанию (по умолчанию), DESC — по убыванию.

Ключевое словоНеобязательный
ASCDESC

Например, выведем названия авиакомпаний в алфавитном порядке из таблицы Company:

MySQL 8.4
SELECT name FROM Company ORDER BY name;
name
Aeroflot
air_France
British_AW
Dale_avia
Don_avia
name
Aeroflot
British_AW
Dale_avia
Don_avia
air_France

Сортировка по возрастанию и убыванию для основных типов

Тип данныхASC (по возрастанию)DESC (по убыванию)
Строковый типЛексикографический (алфавитный) порядок от «A» до «Z» (или от «А» до «Я»)

Сначала идут записи, начинающиеся на «a», затем на «b» и т.д.
Лексикографический порядок от «Z» до «A» (или от «Я» до «А»)

Сначала идут записи, начинающиеся на «z», «y» и т.д.
Числовой типОт меньшего к большемуОт большего к меньшему
Дата и времяОт более ранней даты/времени к более поздней

Например, сначала 01.01.2024, затем 01.02.2024
От более поздней даты/времени к более ранней

Например, сначала 01.02.2024, затем 01.01.2024
Булевый типfalse идёт перед truetrue идёт перед false
NULL значенияNULL значения идут первымиNULL значения идут последними
Тип данныхASC (по возрастанию)DESC (по убыванию)
Строковый типЛексикографический (алфавитный) порядок от «A» до «Z» (или от «А» до «Я»)

Сначала идут записи, начинающиеся на «a», затем на «b» и т.д.
Лексикографический порядок от «Z» до «A» (или от «Я» до «А»)

Сначала идут записи, начинающиеся на «z», «y» и т.д.
Числовой типОт меньшего к большемуОт большего к меньшему
Дата и времяОт более ранней даты/времени к более поздней

Например, сначала 01.01.2024, затем 01.02.2024
От более поздней даты/времени к более ранней

Например, сначала 01.02.2024, затем 01.01.2024
Булевый типfalse идёт перед truetrue идёт перед false
NULL значенияNULL значения идут последнимиNULL значения идут первыми

Сортировка по нескольким столбцам

Для сортировки результатов по двум или более столбцам их следует указывать через запятую.

MySQL 8.4
ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC];
  • [ ]необязательная часть
  • a | bодин из вариантов
столбец_1
Столбец, по которому строки сортируются в первую очередь.
столбец_2

Столбец, по которому сортируются строки с одинаковым значением в столбец_1.

ASC | DESC

Направление сортировки для столбца, после которого оно стоит. По умолчанию ASC.

Ключевое словоНеобязательный
ASCDESC

Данные будут сортироваться по первому столбцу, но в случае если попадаются несколько записей с совпадающими значениями в первом столбце, то они сортируются по второму столбцу. Количество столбцов, по которым можно отсортировать, не ограничено.

Выведем информацию о полётах, отсортированную по городу вылета самолёта в порядке возрастания и по городу прибытия в аэропорт в порядке убывания, из таблицы Trip:

MySQL 8.4
SELECT DISTINCT town_from, town_to FROM Trip
ORDER BY town_from, town_to DESC;
town_fromtown_to
LondonSingapore
LondonParis
MoscowRostov
ParisRostov
RostovVladivostok
RostovParis
RostovMoscow
SingaporeLondon
VladivostokRostov

В данном примере в начале записи сортируются по полю town_from. Затем отрабатывает обратная сортировка по полю town_to для групп строк, у которых в столбце town_from одинаковое значение.

Демонстрация работы сортировки