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>