0 added
0 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>Такой запрос вернет всю информацию о пользователях, отсортированную по username. Если порядок не указан, то сортировка происходит по возрастанию ASC.</p>
7
<p>Такой запрос вернет всю информацию о пользователях, отсортированную по username. Если порядок не указан, то сортировка происходит по возрастанию ASC.</p>
8
<p>Сортировка подразумевает сравнение значений между собой. По какому принципу база данных сортирует строки username как в примере выше? Самый распространенный способ - лексикографический порядок, то есть по алфавиту.</p>
8
<p>Сортировка подразумевает сравнение значений между собой. По какому принципу база данных сортирует строки username как в примере выше? Самый распространенный способ - лексикографический порядок, то есть по алфавиту.</p>
9
<p>База данных знает, как сравнивать не только числа, но и строки, и даты. Сортировка по датам - крайне частая операция, выглядит она идентично любой другой сортировке:</p>
9
<p>База данных знает, как сравнивать не только числа, но и строки, и даты. Сортировка по датам - крайне частая операция, выглядит она идентично любой другой сортировке:</p>
10
<p>Здесь мы отсортировали пользователей по дате создания в прямом порядке, то есть по возрастанию.</p>
10
<p>Здесь мы отсортировали пользователей по дате создания в прямом порядке, то есть по возрастанию.</p>
11
<h2>Управление порядком сортировки</h2>
11
<h2>Управление порядком сортировки</h2>
12
<p>Сортировать данные можно разными способами:</p>
12
<p>Сортировать данные можно разными способами:</p>
13
<ul><li>В прямом порядке</li>
13
<ul><li>В прямом порядке</li>
14
<li>В обратном порядке</li>
14
<li>В обратном порядке</li>
15
<li>По нескольким полям</li>
15
<li>По нескольким полям</li>
16
</ul><h3>Прямой порядок сортировки</h3>
16
</ul><h3>Прямой порядок сортировки</h3>
17
<p>Если ничего дополнительно не указывать, то ORDER BY сортирует в<strong>прямом порядке</strong>- от меньшего к большему. Запрос выше - это сокращенная версия полного запроса с сортировкой. Полный запрос включает в себя ASC, который подставляется автоматически, если ничего не указано:</p>
17
<p>Если ничего дополнительно не указывать, то ORDER BY сортирует в<strong>прямом порядке</strong>- от меньшего к большему. Запрос выше - это сокращенная версия полного запроса с сортировкой. Полный запрос включает в себя ASC, который подставляется автоматически, если ничего не указано:</p>
18
<h3>Обратный порядок сортировки</h3>
18
<h3>Обратный порядок сортировки</h3>
19
<p>Чтобы выполнить сортировку в обратном порядке, указывается DESC:</p>
19
<p>Чтобы выполнить сортировку в обратном порядке, указывается DESC:</p>
20
<h3>Сортировка по нескольким полям</h3>
20
<h3>Сортировка по нескольким полям</h3>
21
<p>Иногда нужно сортировать данные сразу по нескольким полям. Этого можно достичь, если перечислить поля через запятую:</p>
21
<p>Иногда нужно сортировать данные сразу по нескольким полям. Этого можно достичь, если перечислить поля через запятую:</p>
22
<p>Порядок сортировки в таком случае задается для каждого поля индивидуально:</p>
22
<p>Порядок сортировки в таком случае задается для каждого поля индивидуально:</p>
23
<p>В этой выборке сначала выполняется сортировка по имени в прямом порядке. Затем внутри групп с одинаковым именем данные сортируются по<em>created_at</em>в обратном порядке.</p>
23
<p>В этой выборке сначала выполняется сортировка по имени в прямом порядке. Затем внутри групп с одинаковым именем данные сортируются по<em>created_at</em>в обратном порядке.</p>
24
<p>Еще у сортировки есть один тонкий момент, который связан с полями NULL.</p>
24
<p>Еще у сортировки есть один тонкий момент, который связан с полями NULL.</p>
25
<h2>Сортировка NULL-значений</h2>
25
<h2>Сортировка NULL-значений</h2>
26
<p>Если поле содержит NULL, и ничего не указано дополнительно, то считается, что NULL больше любого значения. Получается, что при прямой сортировке они окажутся в конце выборки, а при обратной - в начале. Этим поведением можно управлять с помощью фразы NULLS FIRST:</p>
26
<p>Если поле содержит NULL, и ничего не указано дополнительно, то считается, что NULL больше любого значения. Получается, что при прямой сортировке они окажутся в конце выборки, а при обратной - в начале. Этим поведением можно управлять с помощью фразы NULLS FIRST:</p>
27
<p>и NULLS LAST:</p>
27
<p>и NULLS LAST:</p>
28
<h2>Выводы</h2>
28
<h2>Выводы</h2>
29
<p>В этом уроке мы узнали, что данные в выборке можно сортировать в определенном порядке с помощью запроса ORDER. Он позволяет сортировать данные от меньшего к большему, в обратном порядке и сразу по нескольким полям. Также с его помощью можно управлять сортировкой NULL-значений.</p>
29
<p>В этом уроке мы узнали, что данные в выборке можно сортировать в определенном порядке с помощью запроса ORDER. Он позволяет сортировать данные от меньшего к большему, в обратном порядке и сразу по нескольким полям. Также с его помощью можно управлять сортировкой NULL-значений.</p>