order by id asc что такое
Сортировка в MySQL
В этой статье приведены примеры использования оператора ORDER BY для сортировки записей в MySQL.
Синтаксис оператора ORDER BY:
Направление сортировки
ASC – (по умолчанию, необязательный). Сортирует набор в порядке возрастания или по алфавиту.
DESC – сортирует в порядке убывания.
Сортировка по нескольким столбцам
Также возможно сделать сортировку по несколькольким столбцам, указывая их через запятую в порядке приоритета.
Сортировка по определенной последовательности
Также можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее по алфавиту.
Или убрать в конец ненужные записи:
Сортировка по цене, но исключая нулевые значения
В списках товаров отсортировать значения цен по возрастанию, но при этом нулевые значения были в конце поможет следующий пример.
Сортировка по данным из другой таблицы
К примеру имеется таблица брендов и товаров, нужно отсортировать бренды по количеству товаров.
Сортировка в случайном порядке
Сортировка дат
Проблема возникает если даты хранятся в текстовом виде (например 23.09.2020). Если отсортировать таблицу по такому полю, то результате будут перепутаны месяцы.
Проблема с тапами данных
Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:
SELECT — предложение ORDER BY (Transact-SQL)
Сортирует данные, возвращенные запросом в SQL Server. Это предложение используется для следующих целей:
Упорядочение результирующего набора запроса по заданному списку столбцов и (дополнительно) ограничение числа возвращаемых строк указанным диапазоном. Порядок, в котором строки возвращаются в результирующем наборе, не гарантируется, если не указано предложение ORDER BY.
Определение порядка, в котором значения ранжирующей функции применяются к результирующему набору.
Синтаксические обозначения в Transact-SQL
ORDER BY не поддерживается в инструкциях SELECT/INTO или CREATE TABLE AS SELECT (CTAS) в Azure Synapse Analytics или Система платформы аналитики (PDW).
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
order_by_expression
Указывает столбец или выражение, по которому производится сортировка результирующего набора запроса. Столбец сортировки может быть указан с помощью имени или псевдонима столбца или неотрицательного целого числа, представляющего позицию столбца в списке выбора.
Можно указать несколько столбцов сортировки. Имена столбцов должны быть уникальными. Последовательность столбцов сортировки в предложении ORDER BY определяет организацию упорядоченного результирующего набора. Иными словами, результирующий набор сортируется по первому столбцу, затем упорядоченный список сортируется по второму и т. д.
Имена столбцов, на которые содержатся ссылки в предложении ORDER BY, должны однозначно соответствовать столбцу или псевдониму столбца в списке выбора либо столбцу, определенному в таблице, указанной в предложении FROM. Если предложение ORDER BY ссылается на псевдоним столбца в списке выбора, псевдоним должен использоваться отдельно, а не как часть выражения в предложении ORDER BY, например:
COLLATE collation_name
Указывает, что операция ORDER BY должна выполняться в соответствии с параметрами сортировки, указанными в аргументе collation_name, но не в соответствии с параметрами сортировки столбца, определенными в таблице или представлении. Аргументом collation_name может быть либо имя параметров сортировки Windows, либо имя параметров сортировки SQL. Дополнительные сведения см. в статье Collation and Unicode Support. Аргумент COLLATE применяется только к столбцам типа char, varchar, nchar и nvarchar.
ASC | DESC
Указывает порядок сортировки значений в указанном столбце — по возрастанию или по убыванию. Значение ASC сортирует от низких значений к высоким. Значение DESC сортирует от высоких значений к низким. Порядок сортировки по умолчанию — ASC. Значения NULL рассматриваются как минимально возможные значения.
OFFSET < integer_constant | offset_row_count_expression > < ROW | ROWS >
Указывает число сток, которые необходимо пропустить, прежде чем будет начат возврат строк из выражения запроса. Это значение может быть целочисленной константой или выражением, значение которого больше нуля или равно нулю.
Применимо к: SQL Server 2012 (11.x) и выше, База данных SQL Azure.
offset_row_count_expression может быть переменной, параметром или вложенным запросом, возвращающим скалярную константу. При использовании вложенного запроса он не должен ссылаться на какие-либо столбцы, определенные в области внешнего запроса. Иными словами, он не может коррелировать с внешним запросом.
ROW и ROWS являются синонимами и оставлены для совместимости со стандартом ANSI.
В плане выполнения запроса значение смещения строки отображается в атрибуте Offset оператора запроса TOP.
FETCH < FIRST | NEXT >< integer_constant | fetch_row_count_expression > < ROW | ROWS >ONLY
Указывает число строк, возвращаемых после обработки предложения OFFSET. Это значение может быть целочисленной константой или выражением, значение которого больше единицы или равно единице.
Применимо к: SQL Server 2012 (11.x) и выше, а также База данных SQL Azure.
fetch_row_count_expression может быть переменной, параметром или вложенным запросом, возвращающим скалярную константу. При использовании вложенного запроса он не должен ссылаться на какие-либо столбцы, определенные в области внешнего запроса. Иными словами, он не может коррелировать с внешним запросом.
FIRST и NEXT являются синонимами и предусмотрены для совместимости со стандартом ANSI.
ROW и ROWS являются синонимами и оставлены для совместимости со стандартом ANSI.
В плане выполнения запроса значение смещения строки отображается в атрибуте Rows или Top оператора запроса TOP.
Рекомендации
Избегайте указания столбцов в предложении ORDER BY по их порядковому номеру в списке выбора. Например, хотя инструкция SELECT ProductID, Name FROM Production.Production ORDER BY 2 верна, она будет не очень понятна другим пользователям по сравнению с тем случаем, когда столбцы указаны по именам. Кроме того, если список выбора изменится, в частности изменится порядок столбца или будут добавлены новые столбцы, то это потребует изменения предложения ORDER BY во избежание непредвиденных результатов.
В инструкции SELECT TOP (N) всегда указывайте предложение ORDER BY. Это единственный способ предсказуемым образом отметить строки, которые были обработаны предложением TOP. Дополнительные сведения см. в разделе TOP (Transact-SQL).
Совместимость
При использовании в инструкции SELECT. INTO или INSERT. SELECT предложения ORDER BY для вставки строк из другого источника вставка строк в указанном порядке не гарантируется.
Использование OFFSET и FETCH в представлении не приведет к изменению его свойства Updateability.
Ограничения
Нет ограничения на число столбцов в предложении ORDER BY, однако общий размер столбцов, перечисленных в нем, не может превышать 8060 байт.
Столбцы типа ntext, text, image, geography, geometry и xml не могут использоваться в предложении ORDER BY.
Нельзя указывать целое число или константу, если аргумент order_by_expression присутствует в ранжирующей функции. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).
Если в качестве имени таблицы в предложении FROM используется псевдоним, то только псевдоним может быть использован для обозначения столбца этой таблицы в предложении ORDER BY.
Имена и псевдонимы столбцов, указанные в предложении ORDER BY, должны быть определены в списке выбора, если инструкция SELECT содержит одно из следующих предложений или операторов:
Кроме того, если в инструкцию входит оператор UNION, EXCEPT или INTERSECT, то имена и псевдонимы столбцов должны быть указаны в списке выбора первого (слева) запроса.
В запросе, содержащем оператор UNION, EXCEPT или INTERSECT, предложение ORDER BY допускается только в конце инструкции. Это ограничение применяется только при использовании операторов UNION, EXCEPT и INTERSECT в запросах верхнего уровня, но не во вложенных запросах. См подраздел «Примеры» ниже.
Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах и вложенных запросах, если также не указаны предложения TOP либо OFFSET и FETCH. В этих объектах предложение ORDER BY используется только для определения строк, возвращаемых предложением TOP или OFFSET и FETCH. Предложение ORDER BY не гарантирует упорядочивания результатов при запросе этих конструкций, если оно не указано в самом запросе.
Предложения OFFSET и FETCH не поддерживаются в индексированных представлениях и представлениях, определенных с предложением CHECK OPTION.
Предложения OFFSET и FETCH могут быть использованы в любом запросе, допускающем применение TOP и ORDER BY, со следующими ограничениями.
Предложение OVER не поддерживает OFFSET и FETCH.
Предложения OFFSET и FETCH не могут быть указаны прямо в инструкциях INSERT, UPDATE, MERGE и DELETE, но могут быть указаны во вложенных запросах, определяемых этими инструкциями. Например, в инструкции INSERT INTO SELECT предложения OFFSET и FETCH могут быть указаны в инструкции SELECT.
В запросе, содержащем оператор UNION, EXCEPT или INTERSECT, предложения OFFSET и FETCH могут быть указаны только в конечном запросе, который определяет порядок следования результатов запроса.
TOP нельзя сочетать с OFFSET и FETCH в одном выражении запроса (в той же области запроса).
Использование OFFSET и FETCH для ограничения числа возвращаемых строк
Для разбиения на страницы и ограничения числа строк, передаваемых клиентскому приложению, рекомендуется пользоваться предложениями OFFSET и FETCH, а не предложением TOP.
Применение в качестве решения для разбиения на страницы предложений OFFSET и FETCH потребует однократного выполнения запроса для каждой «страницы» данных, возвращаемых клиентскому приложению. Например, чтобы вернуть результаты запроса блоками по 10 строк, необходимо выполнить запрос для получения строк с 1 по 10, затем еще раз для получения строк с 11 по 20 и так далее. Каждый запрос выполняется независимо и никаким образом не связан с другими запросами. Это означает, что в отличие от использования курсора, где запрос выполняется всего один раз, а текущее состояние хранится на сервере, за отслеживание состояния отвечает клиентское приложение. Чтобы добиться стабильных результатов между запросами с предложениями OFFSET и FETCH, должны выполняться следующие условия.
Базовые данные, используемые запросом, должны быть неизменными. Иными словами, либо строки, обработанные запросом, не должны обновляться, либо все запросы страниц выполняемого запроса должны выполняться в одной транзакции, использующей моментальный снимок или сериализуемую изоляцию транзакции. Дополнительные сведения об уровнях изоляции транзакции см. в разделе SET TRANSACTION ISOLATION LEVEL (Transact-SQL).
Предложение ORDER BY содержит столбец или сочетание столбцов, которые гарантированно уникальны.
См. пример «Выполнение нескольких запросов в одной транзакции» в подразделе «Примеры» ниже в этом разделе.
Если согласованность планов выполнения важна для решения разбиения на страницы, подумайте над использованием указания запросов OPTIMIZE FOR для параметров OFFSET и FETCH. См. пункт «Указание выражений для значений OFFSET и FETCH» в подразделе «Примеры» ниже в этом разделе. Дополнительные сведения об OPTIMZE FOR см. в статье Указания запросов (Transact-SQL).
Примеры
Категория | Используемые элементы синтаксиса |
---|---|
Основной синтаксис | ORDER BY |
Указание порядка по возрастанию или по убыванию | DESC • ASC |
Указание параметров сортировки | COLLATE |
Указание условного порядка | CASE, выражение |
Использование ORDER BY в ранжирующей функции | Ранжирующие функции |
Ограничение числа возвращаемых строк | OFFSET • FETCH |
Использование ORDER BY с UNION, EXCEPT и INTERSECT | UNION |
Основной синтаксис
В примерах этого раздела показана базовая функциональность предложения ORDER BY с использованием минимально необходимого синтаксиса.
A. Указание единственного столбца, определенного в списке выбора
Б. Указание столбца, не определенного в списке выбора
В следующем примере результирующий набор упорядочивается по столбцу, не включенному в список выбора, но определенному в таблице, указанной в предложении FROM.
В. Указание псевдонима в качестве столбца сортировки
Г. Указание выражения в качестве столбца сортировки
В следующем примере в качестве столбца сортировки используется выражение. Выражение определено с использованием функции DATEPART, чтобы сортировать результирующий набор по году поступления сотрудника на работу.
Указание порядка по возрастанию или по убыванию
A. Указание порядка по убыванию
В следующем примере производится упорядочение результирующего набора по числовому столбцу ProductID в убывающем порядке.
Б. Указание порядка по возрастанию
В следующем примере производится упорядочение результирующего набора по столбцу Name в возрастающем порядке. Символьные значения сортируются в алфавитном порядке, а не в числовом. Иными словами, отсортированное значение 10 находится перед 2.
В. Указание порядка и по возрастанию, и по убыванию
Указание параметров сортировки
Следующий пример показывает, как задание параметров сортировки в предложении ORDER BY может изменить порядок, в котором возвращаются результаты запроса. Созданная таблица содержит столбец, определенный без учета регистра и параметров сортировки диакритических знаков. Вставленные значения имеют различные сочетания регистра и диакритических знаков. Поскольку параметры сортировки в предложении ORDER BY не заданы, первый запрос при упорядочении значений использует порядок сортировки столбца. Во втором запросе в предложении ORDER BY указаны параметры сортировки без учета регистра символов и диакритических знаков, поэтому строки возвращаются в другом порядке.
Указание условного порядка
Использование ORDER BY в ранжирующей функции
В следующем примере предложение ORDER BY используется в ранжирующих функциях ROW_NUMBER, RANK, DENSE_RANK и NTILE.
Ограничение числа возвращаемых строк
В следующих примерах предложения OFFSET и FETCH ограничивают число строк, возвращаемых запросом.
Применимо к: SQL Server 2012 (11.x) и выше, а также База данных SQL Azure.
A. Указание целочисленных констант в качестве значений OFFSET и FETCH
Б. Указание переменных в качестве значений OFFSET и FETCH
В. Указание выражений в качестве значений OFFSET и FETCH
Г. Указание вложенного запроса, возвращающего скалярную константу, в качестве значений OFFSET и FETCH
Д. Выполнение нескольких запросов в одной транзакции
В следующем примере показан один из методов реализации решения разбиения на страницы, который обеспечивает стабильные результаты, возвращаемые во всех запросах. Этот запрос выполняется в одной транзакции уровня изоляции моментального снимка, а столбец, указанный в предложении ORDER BY, гарантирует уникальность столбца.
Использование ORDER BY с UNION, EXCEPT и INTERSECT
Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)
В следующем примере демонстрируется упорядочение результирующего набора по числовому столбцу EmployeeKey в возрастающем порядке.
В следующем примере производится упорядочение результирующего набора по числовому столбцу EmployeeKey в убывающем порядке.
12) ЗАКАЗАТЬ, ASC, DESC
Сортировка результатов
Что такое ORDER BY в MySQL?
MySQL ORDER BY используется вместе с запросом SELECT для упорядоченной сортировки данных. Предложение order by используется для сортировки наборов результатов запроса в порядке возрастания или убывания.
Что такое ключевые слова DESC и ASC?
ASC — это краткая форма для восхождения
DESC — это краткая форма для спуска
Используется для сортировки результатов запроса в стиле сверху вниз.
Используется для сортировки результатов запроса в стиле снизу вверх
При работе с типами данных 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 пригодится в таких ситуациях; мы можем отсортировать список фильмов по названию категории и названию фильма в порядке возрастания.
ORDER BY. Сортировка данных в таблице БД MySQL
Команда ORDER BY
ORDER BY позволяет сортировать записи по одной или нескольким колонкам.
По умолчанию используется восходящий порядок сортировки ( ASC ).
Синтаксис ORDER BY
Рассмотрим несколько примеров сортировки в таблице books из базы данных Bookstore.
Подключимся к базе данных.
Выведем записи таблицы books отсортированные по цене.
mysql> SELECT id, title, author, price
-> FROM books
-> ORDER BY price;
+—-+—————————+———————+———+
| id | title | author | price |
+—-+—————————+———————+———+
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 |
| 10 | Бесы | Фёдор Достоевский | 212.00 |
| 1 | Дубровский (Акция) | Александр Пушкин | 230.00 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 |
| 6 | Война и мир | Лев Толстой | 341.00 |
| 7 | Анна Каренина | Лев Толстой | 346.00 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 |
+—-+—————————+———————+———+
10 rows in set (0.00 sec)
mysql> SELECT id, title, author, price
-> FROM books
-> ORDER BY price DESC ;
+—-+—————————+———————+———+
| id | title | author | price |
+—-+—————————+———————+———+
| 8 | Отцы и дети | Иван Тургенев | 371.00 |
| 7 | Анна Каренина | Лев Толстой | 346.00 |
| 6 | Война и мир | Лев Толстой | 341.00 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 |
| 1 | Дубровский (Акция) | Александр Пушкин | 230.00 |
| 10 | Бесы | Фёдор Достоевский | 212.00 |
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 |
+—-+—————————+———————+———+
10 rows in set (0.00 sec)
Важно заметить, что сортировка по второй колонке будет работать, только тогда когда в первой колонке есть повторяющиеся значения. Если в первой колонке все значения уникальны, то вторая колонка не будет отсортирована, иначе будет нарушена целостность таблицы.
Выведем записи отсортированные по двум колонкам author и price.
mysql> SELECT id, title, author, price
-> FROM books
-> ORDER BY author, price DESC ;
+—-+—————————+———————+———+
| id | title | author | price |
+—-+—————————+———————+———+
| 1 | Дубровский (Акция) | Александр Пушкин | 230.00 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 |
| 7 | Анна Каренина | Лев Толстой | 346.00 |
| 6 | Война и мир | Лев Толстой | 341.00 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 |
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 |
| 10 | Бесы | Фёдор Достоевский | 212.00 |
+—-+—————————+———————+———+
10 rows in set (0.00 sec)
Сортировка данных таблицы MySQL с помощью PHP (PDO)
Каждый раз когда пользователь будет менять вид сортировки, страница будет перезагружаться.