HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Обычно у выборки данных из базы нет определенного порядка. Точнее, порядок есть, но он логически не обоснован. По умолчанию база возвращает данные в том порядке, в котором ей удобнее. Иногда этот порядок может совпасть с желаемым, но рассчитывать на это нельзя.</p>
1 <p>Обычно у выборки данных из базы нет определенного порядка. Точнее, порядок есть, но он логически не обоснован. По умолчанию база возвращает данные в том порядке, в котором ей удобнее. Иногда этот порядок может совпасть с желаемым, но рассчитывать на это нельзя.</p>
2 <p>Теоретически порядок может поменяться при следующем запросе, или когда количество данных в таблице изменится. Обновление версии базы данных тоже может повлиять на это.</p>
2 <p>Теоретически порядок может поменяться при следующем запросе, или когда количество данных в таблице изменится. Обновление версии базы данных тоже может повлиять на это.</p>
3 - <p>В этом уроке мы разберем, как сортировать данные в базе в том порядке, который нам нужен. Для этого используется запрос ORDER BY.</p>
3 + <p>В этом уроке мы разберем, как сортировать данные в результате запроса в том порядке, который нам нужен. Для этого используется запрос ORDER BY.</p>
4 <h2>Как устроен запрос на сортировку</h2>
4 <h2>Как устроен запрос на сортировку</h2>
5 <p>Допустим, нам нужно отсортировать данные в базе:</p>
5 <p>Допустим, нам нужно отсортировать данные в базе:</p>
6 <p>Сортировка задается с помощью оператора ORDER BY. За ней следует имя поля, по которому происходит сортировка:</p>
6 <p>Сортировка задается с помощью оператора ORDER BY. За ней следует имя поля, по которому происходит сортировка:</p>
7 <p><a>View on DB Fiddle</a></p>
7 <p><a>View on DB Fiddle</a></p>
8 <p>Такой запрос вернет всю информацию о пользователях, отсортированную по username. Если порядок не указан, то сортировка происходит по возрастанию ASC.</p>
8 <p>Такой запрос вернет всю информацию о пользователях, отсортированную по username. Если порядок не указан, то сортировка происходит по возрастанию ASC.</p>
9 <p>Сортировка подразумевает сравнение значений между собой. По какому принципу база данных сортирует строки username, как в примере выше? Самый распространенный способ -<strong>лексикографический порядок</strong>, то есть по алфавиту.</p>
9 <p>Сортировка подразумевает сравнение значений между собой. По какому принципу база данных сортирует строки username, как в примере выше? Самый распространенный способ -<strong>лексикографический порядок</strong>, то есть по алфавиту.</p>
10 <p>База данных знает, как сравнивать не только числа, но и строки, и даты. Сортировка по датам - крайне частая операция, выглядит она идентично любой другой сортировке:</p>
10 <p>База данных знает, как сравнивать не только числа, но и строки, и даты. Сортировка по датам - крайне частая операция, выглядит она идентично любой другой сортировке:</p>
11 <p><a>View on DB Fiddle</a></p>
11 <p><a>View on DB Fiddle</a></p>
12 <p>Здесь мы отсортировали пользователей по дате создания в прямом порядке, то есть по возрастанию.</p>
12 <p>Здесь мы отсортировали пользователей по дате создания в прямом порядке, то есть по возрастанию.</p>
13 <h2>Как управлять порядком сортировки</h2>
13 <h2>Как управлять порядком сортировки</h2>
14 <p>Сортировать данные можно разными способами:</p>
14 <p>Сортировать данные можно разными способами:</p>
15 <ul><li>В прямом порядке</li>
15 <ul><li>В прямом порядке</li>
16 <li>В обратном порядке</li>
16 <li>В обратном порядке</li>
17 <li>По нескольким полям</li>
17 <li>По нескольким полям</li>
18 </ul><h3>Прямой порядок сортировки</h3>
18 </ul><h3>Прямой порядок сортировки</h3>
19 <p>Если ничего дополнительно не указывать, то ORDER BY сортирует в<strong>прямом порядке</strong>- от меньшего к большему. Запрос выше - это сокращенная версия полного запроса с сортировкой.</p>
19 <p>Если ничего дополнительно не указывать, то ORDER BY сортирует в<strong>прямом порядке</strong>- от меньшего к большему. Запрос выше - это сокращенная версия полного запроса с сортировкой.</p>
20 <p>Полный запрос включает в себя ASC, который подставляется автоматически, если ничего не указано:</p>
20 <p>Полный запрос включает в себя ASC, который подставляется автоматически, если ничего не указано:</p>
21 <p><a>View on DB Fiddle</a></p>
21 <p><a>View on DB Fiddle</a></p>
22 <h3>Обратный порядок сортировки</h3>
22 <h3>Обратный порядок сортировки</h3>
23 <p>Чтобы выполнить сортировку в обратном порядке, указываем DESC:</p>
23 <p>Чтобы выполнить сортировку в обратном порядке, указываем DESC:</p>
24 <p><a>View on DB Fiddle</a></p>
24 <p><a>View on DB Fiddle</a></p>
25 <h3>Сортировка по нескольким полям</h3>
25 <h3>Сортировка по нескольким полям</h3>
26 <p>Иногда нужно отсортировать данные сразу по нескольким полям. Этого можно достичь, если перечислить поля через запятую:</p>
26 <p>Иногда нужно отсортировать данные сразу по нескольким полям. Этого можно достичь, если перечислить поля через запятую:</p>
27 <p><a>View on DB Fiddle</a></p>
27 <p><a>View on DB Fiddle</a></p>
28 <p>Порядок сортировки в таком случае задается для каждого поля в отдельности:</p>
28 <p>Порядок сортировки в таком случае задается для каждого поля в отдельности:</p>
29 <p><a>View on DB Fiddle</a></p>
29 <p><a>View on DB Fiddle</a></p>
30 <p>В этой выборке сначала выполняется сортировка по имени в прямом порядке. Затем внутри групп с одинаковым именем данные сортируются по created_at в обратном порядке.</p>
30 <p>В этой выборке сначала выполняется сортировка по имени в прямом порядке. Затем внутри групп с одинаковым именем данные сортируются по created_at в обратном порядке.</p>
31 <h2>Как сортировать NULL-значения</h2>
31 <h2>Как сортировать NULL-значения</h2>
32 <p>В языке SQL нет единого стандарта как сортировать данные с NULL, и каждый провайдер, авторы базы данных, решает сам. Поэтому положение NULL-значений может отличаться в разных БД. Например, в MySQL NULL будут впереди при сортировке по возрастанию, тогда как в PostgreSQL в самом конце.</p>
32 <p>В языке SQL нет единого стандарта как сортировать данные с NULL, и каждый провайдер, авторы базы данных, решает сам. Поэтому положение NULL-значений может отличаться в разных БД. Например, в MySQL NULL будут впереди при сортировке по возрастанию, тогда как в PostgreSQL в самом конце.</p>
33 <p>Потому, если ваши данные содержат NULL, то важно явно указывать, где должны располагаться значения NULL в результирующем наборе данных. Для этого можно пользоваться двумя расширениями:</p>
33 <p>Потому, если ваши данные содержат NULL, то важно явно указывать, где должны располагаться значения NULL в результирующем наборе данных. Для этого можно пользоваться двумя расширениями:</p>
34 <ul><li>NULLS FIRST</li>
34 <ul><li>NULLS FIRST</li>
35 <li>NULLS LAST</li>
35 <li>NULLS LAST</li>
36 </ul><p>Пример с использованием NULLS FIRST:</p>
36 </ul><p>Пример с использованием NULLS FIRST:</p>
37 <p><a>View on DB Fiddle</a></p>
37 <p><a>View on DB Fiddle</a></p>
38 <p>Пример с использованием NULLS LAST:</p>
38 <p>Пример с использованием NULLS LAST:</p>
39 <p><a>View on DB Fiddle</a></p>
39 <p><a>View on DB Fiddle</a></p>
40 <h2>Выводы</h2>
40 <h2>Выводы</h2>
41 <p>В этом уроке мы научились сортировать результаты запроса, потому что результаты не всегда возвращаются в нужном нам порядке.</p>
41 <p>В этом уроке мы научились сортировать результаты запроса, потому что результаты не всегда возвращаются в нужном нам порядке.</p>
42 <p>Для сортировки используется оператор ORDER BY. Он помогает сортировать данные в том порядке, который нам нужен. При этом, можно сортировать как по возрастанию через ASC, так и по убыванию с помощью DESC.</p>
42 <p>Для сортировки используется оператор ORDER BY. Он помогает сортировать данные в том порядке, который нам нужен. При этом, можно сортировать как по возрастанию через ASC, так и по убыванию с помощью DESC.</p>