SQL
Теория: Сортировка данных
Обычно у выборки данных из базы нет определенного порядка. Точнее, порядок есть, но он логически не обоснован. По умолчанию база возвращает данные в том порядке, в котором ей удобнее. Иногда этот порядок может совпасть с желаемым, но рассчитывать на это нельзя.
Теоретически порядок может поменяться при следующем запросе, или когда количество данных в таблице изменится. Обновление версии базы данных тоже может повлиять на это.
В этом уроке мы разберем, как сортировать данные в базе в том порядке, который нам нужен. Для этого используется запрос ORDER BY.
Как устроен запрос на сортировку
Допустим, нам нужно отсортировать данные в базе:
Сортировка задается с помощью оператора ORDER BY. За ней следует имя поля, по которому происходит сортировка:
Такой запрос вернет всю информацию о пользователях, отсортированную по username. Если порядок не указан, то сортировка происходит по возрастанию ASC.
Сортировка подразумевает сравнение значений между собой. По какому принципу база данных сортирует строки username, как в примере выше? Самый распространенный способ — лексикографический порядок, то есть по алфавиту.
База данных знает, как сравнивать не только числа, но и строки, и даты. Сортировка по датам — крайне частая операция, выглядит она идентично любой другой сортировке:
Здесь мы отсортировали пользователей по дате создания в прямом порядке, то есть по возрастанию.
Как управлять порядком сортировки
Сортировать данные можно разными способами:
- В прямом порядке
- В обратном порядке
- По нескольким полям
Прямой порядок сортировки
Если ничего дополнительно не указывать, то ORDER BY сортирует в прямом порядке — от меньшего к большему. Запрос выше — это сокращенная версия полного запроса с сортировкой.
Полный запрос включает в себя ASC, который подставляется автоматически, если ничего не указано:
Обратный порядок сортировки
Чтобы выполнить сортировку в обратном порядке, указываем DESC:
Сортировка по нескольким полям
Иногда нужно отсортировать данные сразу по нескольким полям. Этого можно достичь, если перечислить поля через запятую:
Порядок сортировки в таком случае задается для каждого поля в отдельности:
В этой выборке сначала выполняется сортировка по имени в прямом порядке. Затем внутри групп с одинаковым именем данные сортируются по created_at в обратном порядке.
Как сортировать NULL-значения
В языке SQL нет единого стандарта как сортировать данные с NULL, и каждый провайдер, авторы базы данных, решает сам. Поэтому положение NULL-значений может отличаться в разных БД. Например, в MySQL NULL будут впереди при сортировке по возрастанию, тогда как в PostgreSQL в самом конце.
Потому, если ваши данные содержат NULL, то важно явно указывать, где должны располагаться значения NULL в результирующем наборе данных. Для этого можно пользоваться двумя расширениями:
NULLS FIRSTNULLS LAST
Пример с использованием NULLS FIRST:
Пример с использованием NULLS LAST:
Выводы
В этом уроке мы научились сортировать результаты запроса, потому что результаты не всегда возвращаются в нужном нам порядке.
Для сортировки используется оператор ORDER BY.
Он помогает сортировать данные в том порядке, который нам нужен. При этом, можно сортировать как по возрастанию через ASC, так и по убыванию с помощью DESC.
.png)






















