Сортировка в MySQL
В этой статье приведены примеры использования оператора ORDER BY для сортировки записей в MySQL.
Синтаксис оператора ORDER BY:
Направление сортировки
ASC – (по умолчанию, необязательный). Сортирует набор в порядке возрастания или по алфавиту.
DESC – сортирует в порядке убывания.
Сортировка по нескольким столбцам
Также возможно сделать сортировку по несколькольким столбцам, указывая их через запятую в порядке приоритета.
Сортировка по определенной последовательности
Также можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее по алфавиту.
Или убрать в конец ненужные записи:
Сортировка по цене, но исключая нулевые значения
В списках товаров отсортировать значения цен по возрастанию, но при этом нулевые значения были в конце поможет следующий пример.
Сортировка по данным из другой таблицы
К примеру имеется таблица брендов и товаров, нужно отсортировать бренды по количеству товаров.
Сортировка в случайном порядке
Сортировка дат
Проблема возникает если даты хранятся в текстовом виде (например 23.09.2020). Если отсортировать таблицу по такому полю, то результате будут перепутаны месяцы.
Проблема с тапами данных
Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:
12) ЗАКАЗАТЬ, ASC, DESC
Сортировка результатов
Что такое ORDER BY в MySQL?
MySQL ORDER BY используется вместе с запросом SELECT для упорядоченной сортировки данных. Предложение order by используется для сортировки наборов результатов запроса в порядке возрастания или убывания.
Что такое ключевые слова DESC и ASC?


Используется для сортировки результатов запроса в стиле сверху вниз.
Используется для сортировки результатов запроса в стиле снизу вверх
При работе с типами данных date самая ранняя дата отображается в верхней части списка.
, При работе с типами дат самая последняя дата отображается в верхней части списка.
При работе с числовыми типами данных самые низкие значения отображаются в верхней части списка.
При работе с числовыми типами данных самые высокие значения отображаются в верхней части набора результатов запроса.
При работе со строковыми типами данных набор результатов запроса сортируется от тех, которые начинаются с буквы А и заканчиваются буквой Z.
При работе со строковыми типами данных набор результатов запроса сортируется по тем, которые начинаются с буквы Z и идут вниз до буквы A.
Ключевые слова DESC и ASC используются вместе в сочетании с оператором SELECT и предложением ORDER BY.
DESC и ASC синтаксис
Ключевое слово сортировки DESC имеет следующий основной синтаксис.
Примеры:
Давайте теперь посмотрим на практический пример —
Выполнение вышеупомянутого сценария в MySQL Workbench против myflixdb дает нам следующие результаты, показанные ниже.
Executing the above script in MySQL workbench against the myflixdb gives us the following results shown below.

The same query in ascending order
SELECT * FROM members ORDER BY date_of_birth ASC

More examples
Let’s consider the following script that lists all the member records.
Executing the above script gives the following results shown below.
Предположим, что мы хотим получить список, который сортирует набор результатов запроса, используя поле пола, мы будем использовать скрипт, показанный ниже.
Сначала отображались «женские» элементы, а затем «мужские», так как при использовании предложения order by без указания ключевого слова ASC или DESC по умолчанию MySQL сортирует набор результатов запроса в порядке возрастания.
Давайте теперь посмотрим на пример, который выполняет сортировку с использованием двух столбцов ; первый сортируется по возрастанию по умолчанию, а второй столбец сортируется по убыванию.
Выполнение вышеупомянутого сценария в MySQL Workbench против myflixdb дает следующие результаты.

Почему мы можем использовать DESC и ASC?
Предположим, что мы хотим напечатать историю платежей для члена библиотеки видео, чтобы помочь ответить на запросы со стойки регистрации, не будет ли более логичным печатать платежи в порядке убывания в хронологическом порядке, начиная с недавнего платежа до более раннего платежа?
Ключевое слово DESC пригодится в таких ситуациях. Мы можем написать запрос, который сортирует список по убыванию, используя дату платежа.
Предположим, что отдел маркетинга хочет получить список фильмов по категориям, которые участники могут использовать, чтобы решить, какие фильмы доступны в библиотеке при аренде фильмов, не будет ли более логичным смотреть сортировку названий и названий категорий фильмов по возрастанию, чтобы участники могут быстро искать информацию из списка?
Ключевое слово ASC пригодится в таких ситуациях; мы можем отсортировать список фильмов по названию категории и названию фильма в порядке возрастания.
ASC DESC расшифровка
В sql запросах используют ASC и DESC для сортировки результатов выборки из базы данных.
Но, вот стало интересно, а что же они означают.
Все достаточно просто и прозаично.
Это укороченные английские слова:
ASC
ASCending переводится, как: восходящий, поднимающийся возрастающий.
DESC
DESCending переводится, как: нисходящий, убывающий, падающий.
Использование сортировки в MySQL
Как мы уже поняли ASC — это по возрастанию: от 1 и выше; от a до z, и так далее.
Сортировка в обратном порядке
Сортировка по нескольким столбцам
При выполнении запроса часто нужно делать сортировку не по одному стоблцу. А по двум или нескольким. В таком случае можно их вводить через запятую в порядке приоритета:
сначала записи отсортируются по первому столбцу, затем по второму, если записи в первом столбце совпадают и т.д.:
Сортировка в случайном порядке (рандом)
Для этого используется sql-функция RAND():
Сортировка в порядке, определенном пользователем
Если вам нужно получить записи из Базы Данных в нужной вам последовательности, то можете использовать фукцию FIELD().
Следующий запрос выведет сначала все данные с записями в стоблцу BRAND: ‘Asus’,’HP’, ‘Acer’. Именно в таком порядке. Этих записей может быть сколько угодно.
Предыдущий запрос можно раширить и скомбинировать сортировку из нескольких полей. После сортировки в определенном порядке, сортировать по ID:
Сортировка по дате
Если данные в базе данных хранятся в обычном текстовом виде (varchar, text и т.д.), например: 08.11.1990 или 08-11-1990.
То нам сначала нужно перевести в формат datetime. В этом нам поможет функция STR_TO_DATE():
Сортировка по цене, исключая нулевые значения
В этом случае два аргумента для сортировки.
Первый проверяет значение ячейки price: больше нуля или нет.
Второй аргумент — это как раз сам столбец price
Урок 4. Сортировка результатов
В SQL часто кроме фильтрации данных, также часто требуется отсортировать их по одному из столцов.
В первом уроке мы написали SQL-запрос для получения данных о совершенолетних пользователях. Посмотрим на него еще раз:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 3 | Шевченко | Тимур | 1998-04-27 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 6 | Иванов | Алексей | 1993-08-05 |
| 7 | Процук | Алена | 1997-02-28 |
Обратите внимание, что сейчас данные никак не упорядочены. Ни по фамилии, ни по имени, ни по дате рождения. Но давайте добавим после конструции WHERE: ORDER BY last_name:.
После выполнение данного SQL запроса мы получим таблицу отсортированную по столбцу last_name (фамилия). Так как last_name хранит строки, то сортировка происходит в алфавитном порядке:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 6 | Иванов | Алексей | 1993-08-05 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
Обратите внимание, что данные отсортированы только по фамилии, но не по другим полям. Однако давайте добавим через запятую еще один столбец, например, first_name:
Теперь таблица отсортирована сразу по двум поля, сперва по фамилии, а уже затем по имени:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 6 | Иванов | Алексей | 1993-08-05 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
Разумеется, сортировать можно не только по текстовым полям. Например, можно написать ORDER BY birthday:
И получить данные упорядоченные по дате рождения в хронологическом порядке:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 6 | Иванов | Алексей | 1993-08-05 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
А если в конструкции ORDER BY после имени столца написать DESC, то данные будут отсортированы в обратном порядке — свежие даты выше:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 3 | Шевченко | Тимур | 1998-04-27 |
| 7 | Процук | Алена | 1997-02-28 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 6 | Иванов | Алексей | 1993-08-05 |
Более того при сортировке данных по нескольким столцам, мы можем для разных столцов указывать разные направления сортировки. Например ORDER BY last_name, birthday DESC:
Тогда данные будут сперва отсортированы в алфавитном порядке по фамилии, а уже внутри каждой фамилии по дате рождения в обратном порядке:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 6 | Иванов | Алексей | 1993-08-05 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
Следующий урок
Урок 5. Ограничение выборки
В этом уроке вы научитесь ограничивать итоговые результаты с помощью конструкции LIMIT.
Тарифы
Базовый
Самостоятельное обучение по в любой момент
55 видео- уроков
Более 7 часов видео
Дополнительные материалы
Схемы, методички, исходные коды
Возможность скачать видео
Смотреть уроки можно даже без интернета
Доступ к курсу навсегда
Можете освежить знания через год или два
271 практическое задание
Практические занятия на тренажере
Поддержка преподавателя
Помощь в решении заданий в течение 24 часов
Сертификат о прохождении курса
Подтверждение ваших навыков
Эталонные решения
Доступ к видео-урокам + тестовый Премиум доступ к 7 урокам, 26 заданиям и поддержке преподавателя
Премиум
Теория, практика и поддержка —
залог успешного обучения
55 видео- уроков
Более 7 часов видео
Дополнительные материалы
Схемы, методички, исходные коды
Возможность скачать видео
Смотреть уроки можно даже без интернета
Доступ к курсу навсегда
Условия бесплатного тарифа могут измениться
271 практическое задание
Практические занятия на тренажере
Поддержка преподавателя
Помощь в решении заданий в течение 24 часов
Сертификат о прохождении курса
Подтверждение ваших навыков
Эталонные решения
Бесплатный тестовый Премиум доступ к 7 урокам, 26 заданиям и поддержке преподавателя
Команды ORDER BY, LIMIT, COUNT, LIKE в SQL
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
С помощью команды ORDER BY можно сортировать строки результата.
Выберем из нашей таблицы workers всех работников и отсортируем их по возрасту:
Если мы хотим обратный порядок сортировки, то следует написать:
LIMIT — ограничение количества
С помощью команды LIMIT мы можем ограничить количество строк в результате.
В следующем примере ограничим количество строк до двух:
Однако, это еще не все!
С помощью LIMIT можно выбрать несколько строк из середины результата!
В примере ниже мы выберем со второй строки, 5 штук:
LIMIT и ORDER вместе:
Команда COUNT — считаем количество
С помощью команды COUNT можно подсчитать количество строк в выборке.
Обратите внимание на распространенную ошибку с COUNT: конструкцию COUNT(*) следует писать слитно, без всяких пробелов, иначе не будет работать.
С помощью команды LIKE (англ. подобный) можно реализовать поиск. Посмотрите пример использования с комментарием:
Подробнее о возможностях этой команды смотрите здесь: LIKE.
Кавычки «
Обратите внимание на такой нюанс: следующий запрос работать не будет, так как имя таблицы from совпадает с командой FROM:
В таких случаях проблемные слова следует брать в косые кавычки, вот так:
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.




