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

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

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

MySQL
SELECT поля_таблиц FROM наименование_таблицы
WHERE ...
ORDER BY столбец_1 [ASC | DESC][, столбец_n [ASC | DESC]]

Где ASC и DESC - направление сортировки:

  • ASC - сортировка по возрастанию (по умолчанию)
  • DESC - сортировка по убыванию

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

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

MySQL
...ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC];

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

Правило сортировки применяется только к тому столбцу, за которым оно следует.

ORDER BY столбец_1, столбец_2 DESC

не то же самое, что

ORDER BY столбец_1 DESC, столбец_2 DESC

Примеры использования

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

    Сортировка строковых данных по возрастанию подразумевает сортировку в лексикографическом (алфавитном) порядке.

    MySQL
    SELECT name FROM Company ORDER BY name;
    
    name
    Aeroflot
    air_France
    British_AW
    Dale_avia
    Don_avia
  • Выведем информацию о полётах, отсортированную по городу вылета самолёта в порядке возрастания и по городу прибытия в аэропорт в порядке убывания, из таблицы Trip:

    MySQL
    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 одинаковое значение.