ЗАКАЗАТЬ ПО в MySQLЗапрос по возрастанию и убыванию с примером
⚡ Умное резюме
ЗАКАЗАТЬ ПО в MySQL Эта команда сортирует наборы результатов запроса в порядке возрастания или убывания с помощью ключевых слов ASC и DESC. В разделах ниже объясняется синтаксис, сортировка по одному и нескольким столбцам, размещение значений NULL и приводятся примеры выполнения на примере базы данных myflixdb.

Что такое ORDER BY в MySQL?
MySQL СОРТИРОВАТЬ ПО Это условие используется в запросе SELECT для упорядоченной сортировки данных. MySQL Предложение ORDER BY сортирует набор результатов запроса в порядке возрастания или убывания, по одному столбцу или по нескольким столбцам одновременно.
При использовании команды SELECT сами по себе строки возвращаются в том порядке, в котором механизм хранения их считывает, что не гарантируется. Сортировка — это просто перестановка этих строк в заданной последовательности. Она может выполняться как для числовых, так и для строковых и датовых типов данных.
MySQL Сортировать по синтаксису
Прежде чем рассматривать примеры, полезно увидеть, где именно находится этот пункт в полном операторе SELECT.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
ВОТ
- Оператор SELECT... " Это обычный запрос SELECT.
- "| " представляет собой альтернативы.
- “[WHERE condition | GROUP BY `field_name(s)` HAVING condition]” Это необязательное условие, используемое для фильтрации набора результатов запроса.
- "СОРТИРОВАТЬ ПО" Выполняет сортировку набора результатов запроса.
- «[АСК | DESC]” Ключевое слово `is` используется для сортировки результирующего набора в порядке возрастания или убывания. Обратите внимание, что ASC по умолчанию.
Что такое ключевые слова DESC и ASC?
ASC и DESC — это два направления сортировки, которые принимает команда ORDER BY. В таблице ниже приведено сравнение этих направлений для типов данных, которые вы будете сортировать чаще всего.
ASC — это короткая форма слова «восходящий». |
MySQL DESC – это короткая форма нисходящего |
|---|---|
| Он используется для сортировки результатов запроса сверху вниз. | Он используется для сортировки результатов запроса снизу вверх. |
| При работе с типами данных даты самая ранняя дата отображается вверху списка. | При работе с датами самая поздняя дата отображается вверху списка. |
| При работе с числовыми типами данных наименьшие значения отображаются вверху списка. | При работе с числовыми типами данных наибольшие значения отображаются в верхней части набора результатов запроса. |
| При работе со строковыми типами данных набор результатов запроса сортируется от тех, которые начинаются с буквы A и заканчиваются буквой Z. | При работе со строковыми типами данных набор результатов запроса сортируется от начинающихся с буквы Z до буквы A. |
Ключевые слова SQL DESC и ASC используются в сочетании с оператором SELECT и MySQL Предложение ORDER BY.
Синтаксис DESC и ASC
Ключевое слово сортировки SQL DESC имеет следующий базовый синтаксис.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
ВОТ
- ВЫБЕРИТЕ {имя поля | *} FROM tableName(s) Это оператор, содержащий поля и таблицу (таблицы), из которых следует получить результирующий набор.
- [ГДЕ условие] не является обязательным, но может использоваться для фильтрации данных в соответствии с заданным условием.
- Сортировать по имени(-ам) поля Этот параметр является обязательным и указывает поле, по которому выполняется сортировка. MySQL Ключевое слово DESC указывает, что сортировка выполняется в порядке убывания.
- [LIMIT N] Этот параметр необязателен, но может использоваться для ограничения количества строк, возвращаемых из результирующего набора данных запроса.
Зачем использовать DESC и ASC в MySQL?
Знание синтаксиса — это лишь половина дела. Функция ORDER BY существует потому, что набор результатов, который легко создать базе данных, не всегда легко прочитать человеку.
Предположим, вам нужно распечатать историю платежей для пользователя видеотеки, чтобы сотрудники стойки регистрации могли быстро отвечать на запросы. Гораздо логичнее распечатать платежи в хронологическом порядке убывания, начиная с самого последнего и заканчивая самым ранним. В SQL ключевое слово DESC оказывается очень полезным в такой ситуации, поскольку список можно отсортировать по дате платежа.
Предположим, отдел маркетинга хочет получить список фильмов по категориям, чтобы пользователи могли видеть, какие фильмы есть в библиотеке, прежде чем брать их напрокат. Сортировка названий категорий и фильмов в порядке возрастания позволяет пользователям быстро находить информацию, точно так же, как в индексе. Ключевое слово ASC служит этой цели.
Вкратце, команда ORDER BY преобразует исходный набор результатов в отчет. Выбор ключевого слова зависит от вопроса, который задает читатель: что произошло совсем недавно призывают к DESC, в то время как Где я могу найти этот товар? призывы к ASC.
MySQL Сортировать по примеру
Все приведенные ниже примеры работают с использованием демонстрационной базы данных myflixdb. Начнем с несортированной таблицы members, которая возвращается в порядке по умолчанию.
SELECT * FROM members;
Выполнение приведенного выше сценария в MySQL Результаты, полученные с помощью Workbench при работе с базой данных myflixdb, показаны ниже.
| Количество членов | полные имена | пол | Дата рождения | Физический адрес | почтовый_адрес | контактный_номер | |
|---|---|---|---|---|---|---|---|
| 1 | Джанет Джонс | F | 21-07-1980 | Первая улица, участок № 4 | Частная сумка | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Джанет Смит Джонс | F | 23-06-1980 | Мелроуз 123 | NULL, | NULL, | jj@fstreet.com |
| 3 | Роберт Фил | M | 12-07-1989 | 3-я улица, 34 | NULL, | 12345 | rm@ttreet.com |
| 4 | Глория Уильямс | F | 14-02-1984 | 2-я улица, 23 | NULL, | NULL, | NULL, |
| 5 | Леонард Хофштадтер | M | NULL, | Вудкрест | NULL, | 845738767 | NULL, |
| 6 | Шелдон Купер | M | NULL, | Вудкрест | NULL, | 976736763 | NULL, |
| 7 | Раджеш Кутраппали | M | NULL, | Вудкрест | NULL, | 938867763 | NULL, |
| 8 | Лесли Винкль | M | 14-02-1984 | Вудкрест | NULL, | 987636553 | NULL, |
| 9 | Говард Воловиц | M | 24-08-1981 | Южный парк | Почтовый ящик 4563 | 987786553 | NULL, |
Сортировка в порядке убывания с помощью DESC
Предположим, отдел маркетинга хочет, чтобы данные о сотрудниках были упорядочены по убыванию даты рождения. Это поможет команде своевременно отправлять поздравления с днем рождения. Список формируется с помощью приведенного ниже запроса.
SELECT * FROM members ORDER BY date_of_birth DESC;
Выполнение приведенного выше сценария в MySQL Результаты, полученные с помощью Workbench при работе с базой данных myflixdb, показаны ниже.
Сортировка по возрастанию (ASC)
В том же запросе, но в порядке возрастания, просто меняется ключевое слово.
SELECT * FROM members ORDER BY date_of_birth ASC;
Примечание: Значение NULL означает отсутствие какого-либо значения, что не то же самое, что ноль или пустая строка. Обратите внимание на обоих скриншотах, как даты со значением NULL сгруппированы вместе: MySQL Функция рассматривает значение NULL как меньшее любого другого значения, поэтому строки со значением NULL отображаются первыми в порядке возрастания (ASC) и последними в порядке убывания (DESC).
Как отсортировать данные по нескольким столбцам в MySQL
Сортировка по одному столбцу решает простые задачи. Отчетам обычно требуется второй уровень сортировки, и функция ORDER BY принимает список полей, разделенных запятыми, именно для этой цели.
Рассмотрим следующий SQL-скрипт сортировки, который перечисляет все записи участников без каких-либо явных указаний.
SELECT * FROM `members`;
Выполнение приведенного выше сценария дает следующие результаты, показанные ниже.
| Количество членов | полные имена | пол | Дата рождения | Физический адрес | почтовый_адрес | контактный_номер | |
|---|---|---|---|---|---|---|---|
| 1 | Джанет Джонс | F | 21-07-1980 | Первая улица, участок № 4 | Частная сумка | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Джанет Смит Джонс | F | 23-06-1980 | Мелроуз 123 | NULL, | NULL, | jj@fstreet.com |
| 3 | Роберт Фил | M | 12-07-1989 | 3-я улица, 34 | NULL, | 12345 | rm@ttreet.com |
| 4 | Глория Уильямс | F | 14-02-1984 | 2-я улица, 23 | NULL, | NULL, | NULL, |
| 5 | Леонард Хофштадтер | M | NULL, | Вудкрест | NULL, | 845738767 | NULL, |
| 6 | Шелдон Купер | M | NULL, | Вудкрест | NULL, | 976736763 | NULL, |
| 7 | Раджеш Кутраппали | M | NULL, | Вудкрест | NULL, | 938867763 | NULL, |
| 8 | Лесли Винкль | M | 14-02-1984 | Вудкрест | NULL, | 987636553 | NULL, |
| 9 | Говард Воловиц | M | 24-08-1981 | Южный парк | Почтовый ящик 4563 | 987786553 | NULL, |
Сортировка отдельного столбца по порядку по умолчанию
Предположим, нам нужен список, который сортирует набор результатов запроса по полю «пол». Приведенный ниже скрипт делает это без указания направления.
SELECT * FROM `members` ORDER BY `gender`;
| Количество членов | полные имена | пол | Дата рождения | Физический адрес | почтовый_адрес | контактный_номер | |
|---|---|---|---|---|---|---|---|
| 1 | Джанет Джонс | F | 21-07-1980 | Первая улица, участок № 4 | Частная сумка | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Джанет Смит Джонс | F | 23-06-1980 | Мелроуз 123 | NULL, | NULL, | jj@fstreet.com |
| 4 | Глория Уильямс | F | 14-02-1984 | 2-я улица, 23 | NULL, | NULL, | NULL, |
| 3 | Роберт Фил | M | 12-07-1989 | 3-я улица, 34 | NULL, | 12345 | rm@ttreet.com |
| 5 | Леонард Хофштадтер | M | NULL, | Вудкрест | NULL, | 845738767 | NULL, |
| 6 | Шелдон Купер | M | NULL, | Вудкрест | NULL, | 976736763 | NULL, |
| 7 | Раджеш Кутраппали | M | NULL, | Вудкрест | NULL, | 938867763 | NULL, |
| 8 | Лесли Винкль | M | 14-02-1984 | Вудкрест | NULL, | 987636553 | NULL, |
| 9 | Говард Воловиц | M | 24-08-1981 | Южный парк | Почтовый ящик 4563 | 987786553 | NULL, |
Сначала отображаются женщины, затем мужчины. Это происходит потому, что при использовании предложения ORDER BY без указания ASC или MySQL Ключевое слово DESC, MySQL По умолчанию сортирует набор результатов запроса в порядке возрастания.
Сортировка двух столбцов в противоположных направлениях
Рассмотрим теперь пример, который выполняет следующее: сортировка по двум столбцамПервый столбец — отсортированный in по возрастанию по умолчанию, а второй столбец — отсортированный in в порядке убывания.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Выполнение приведенного выше сценария в MySQL При использовании Workbench для работы с базой данных myflixdb получены следующие результаты.
По умолчанию столбец «Пол» был отсортирован в порядке возрастания, а столбец «Дата рождения» — в порядке убывания. Каждое ключевое слово направления применяется только к тому столбцу, за которым оно следует.
Как объединить ORDER BY с WHERE, LIMIT и GROUP BY
Оператор ORDER BY редко является единственным условием в рабочем запросе. MySQL Функция всегда оценивает условия в фиксированной последовательности, и знание этой последовательности объясняет, почему результаты выглядят именно так.
- от считывает строки из таблицы.
- ГДЕ Отбрасывает строки, которые не соответствуют условию.
- ГРУППА ПО Объединяет оставшиеся строки в группы и фильтрует эти группы с помощью оператора HAVING.
- СОРТИРОВАТЬ ПО упорядочивает оставшиеся строки.
- ОГРАНИЧЕНИЯ Отсекает запрошенное количество строк отсортированного списка.
Поскольку оператор ORDER BY выполняется после операторов WHERE и GROUP BY, но перед оператором LIMIT, запрос, например, «пять самых молодых членов семьи из Вудкреста», выражается в одном операторе.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Аналогичный порядок применяется и к сгруппированным результатам. Сводные значения, полученные с помощью агрегатные функции Например, значение COUNT можно отсортировать, так что наиболее загруженная категория поднимется в начало отчета.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Наконечник: Оператор ORDER BY позволяет сортировать по псевдониму столбца, по выражению или даже по позиции столбца, например, ORDER BY 3. Сортировка по позиции ненадежна, поскольку добавление нового столбца в список SELECT автоматически изменяет ключ сортировки. Вместо этого лучше присвоить столбцу имя.
Стоит помнить об одном важном моменте, касающемся производительности. Когда отсортированный столбец содержит индекс, MySQL Можно считывать строки в порядке индекса и вообще пропускать сортировку. Без индекса большие таблицы вынуждают выполнять сортировку файлов в оперативной памяти или на диске, что обычно является причиной замедления выполнения запросов к отчету.

ASC — это короткая форма слова «восходящий».
MySQL DESC – это короткая форма нисходящего

