Поделиться через


Предложение ORDER BY (Transact-SQL)

Указывает порядок сортировки для столбцов, возвращаемых инструкцией SELECT. Предложение ORDER BY не может применяться в представлениях, встроенных функциях, производных таблицах и вложенных запросах, если не указано предложение TOP.

ПримечаниеПримечание

При использовании предложения ORDER BY в определении представления, встроенной функции, производной таблице или вложенном запросе, предложение используется только для определения строк, возвращаемых предложением TOP. Предложение ORDER BY не гарантирует упорядочивания результатов при запросе этих конструкций, если оно не указано в самом запросе.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

[ ORDER BY 
    {
    order_by_expression 
  [ COLLATE collation_name ] 
  [ ASC | DESC ] 
    } [ ,...n ] 
] 

Аргументы

  • order_by_expression
    Указывает столбец, по которому должна выполняться сортировка. Столбец сортировки может быть указан с помощью имени или псевдонима столбца или неотрицательного целого числа, представляющего позицию имени или псевдонима в списке выбора. Нельзя указывать целое число, если аргумент order_by_expression присутствует в ранжирующей функции. Столбец сортировки может включать выражение, но если база данных находится в режиме совместимости SQL Server (90), то выражение не может быть преобразовано в константу. Имена и псевдонимы столбцов могут быть дополнены именем таблицы или представления. В SQL Server уточненные имена и псевдонимы столбцов связываются со столбцами, перечисленными в предложении FROM. Если в выражении order_by_expression отсутствует квалификатор, то значение должно быть уникальным во всех столбцах, перечисленных в инструкции SELECT.

    Можно указать несколько столбцов сортировки. Последовательность столбцов сортировки в предложении ORDER BY определяет организацию упорядоченного результирующего набора.

    В предложение ORDER BY могут входить элементы, которых нет в списке выборки. Однако если указана конструкция SELECT DISTINCT, или инструкция содержит предложение GROUP BY, или если инструкция SELECT содержит оператор UNION, то столбцы сортировки должны присутствовать в списке выборки.

    Кроме того, если в инструкцию SELECT входит оператор UNION, то имена и псевдонимы столбцов должны быть из числа уточненных в первом списке выбора.

    ПримечаниеПримечание

    Столбцы типа ntext, text, image или xml не могут быть использованы в предложении ORDER BY.

  • COLLATE {collation_name}
    Указывает, что операция ORDER BY должна выполняться в соответствии с параметрами сортировки, указанными в аргументе collation_name, но не в соответствии с параметрами сортировки столбца, определенных в таблице или представлении. Значение collation_name может быть именем параметров сортировки Windows или именем параметров сортировки SQL. Дополнительные сведения см. в разделах Настройка параметров сортировки в программе установки и Использование параметров сортировки SQL Server. Аргумент COLLATE применяется только к столбцам данных типа char, varchar, nchar и nvarchar.

  • ASC
    Указывает, что значения в указанном столбце должны сортироваться по возрастанию, от меньших значений к большим значениям. Сортировка по умолчанию — ASC.

  • DESC
    Указывает, что значения в указанном столбце должны сортироваться по убыванию, от больших значений к меньшим.

Замечания

Значения NULL рассматриваются как минимально возможные значения.

Число элементов в предложении ORDER BY не ограничивается. Однако существует ограничение в 8 060 байт для размера строки промежуточных рабочих таблиц, необходимых для операций сортировки. Это ограничивает общий размер столбцов, указываемый в предложении ORDER BY.

Использование предложения ORDER BY с инструкцией SELECT...INTO для вставки строк из другого источника, не гарантирует вставку строк в указанном порядке.

Примеры

В следующих примерах демонстрируется упорядочивание результирующего набора.

Упорядочивание по числовому столбцу ProductID. По умолчанию задан порядок по возрастанию.

USE AdventureWorks
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID ;

Упорядочивание по числовому столбцу ProductID в порядке по убыванию.

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

Упорядочивание по столбцу Name. Обратите внимание, что символьные значения сортируются в алфавитном порядке, а не в числовом. Иными словами, отсортированное значение 10 находится перед 2.

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC ;

Упорядочивание по двум столбцам. В этом запрос сначала осуществляется сортировка по возрастанию значений в столбце FirstName, а затем — по убыванию значений в столбце LastName.

SELECT LastName, FirstName FROM Person.Contact
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC ;