Сортировка строк с использованием предложения ORDER BY

Предложение ORDER BY сортирует результаты запроса по одному или нескольким столбцам размером до 8 060 байт. Дополнительные сведения о максимальном размере предложения ORDER BY см. в разделе Предложение ORDER BY (Transact-SQL).

Начиная с версии MicrosoftSQL Server 2005 в SQL Server можно указать упорядочивающие столбцы из тех таблиц в предложении FROM, которые не указаны в списке SELECT. Имена столбцов, на которые содержатся ссылки в предложении ORDER BY, должны однозначно соответствовать столбцу в списке SELECT или столбцу таблицы в предложении FROM. Если в качестве имен столбцов в списке SELECT используются псевдонимы, только псевдонимы могут быть использованы в предложении ORDER BY. Аналогично, если в качестве имен таблиц в предложении FROM используются псевдонимы, только псевдонимы могут быть использованы для обозначения столбцов этих таблиц в предложении ORDER BY.

Сортировка может проводиться по возрастанию (ASC) или по убыванию (DESC). Если ни один из вариантов не указан, предполагается режим сортировки по возрастанию (ASC).

Следующий запрос возвращает результаты, упорядоченные по возрастанию ProductID:

USE AdventureWorks;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID

Если в предложении ORDER BY указано более одного столбца, процедуры сортировки являются вложенными. Следующая инструкция сортирует строки в таблице Production.Product сначала по подкатегории продукта по убыванию, а затем по цене ListPrice по возрастанию внутри каждой категории продуктов.

USE AdventureWorks;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice

Точные результаты предложения ORDER BY зависят от параметров сортировки упорядочиваемых столбцов. Дополнительные сведения см. в разделе Работа с параметрами сортировки. Для столбцов типа char, varchar, nchar и nvarchar можно предписать выполнение операций ORDER BY в соответствии с параметрами сортировки, отличными от параметров сортировки для столбца, определенного в таблице или представлении. Можно указать имя параметров сортировки Windows или имя режима сопоставления SQL. Например, столбец LastName таблицы Person.Contact в базе данных AdventureWorks определен с параметрами сортировки Latin1_General, но в приведенном ниже сценарии столбец возвращается по возрастанию с использованием параметров сортировки Traditional_Spanish.

USE AdventureWorks;
GO
SELECT LastName FROM Person.Contact
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC
GO

Нельзя использовать ORDER BY для столбцов, содержащих типы данных text, ntext, image и xml. Кроме того, в списке ORDER BY не допускаются вложенные запросы, статистические и постоянные выражения. Однако пользовательское имя может использоваться в списке выбора для статистических выражений или выражений. Например:

SELECT Color, AVG (ListPrice) AS 'average list price'
FROM Production.Product
GROUP BY Color
ORDER BY 'average list price'

Предложение ORDER BY обеспечивает сортированный результат только для самой внешней инструкции SELECT в запросе. Например, рассмотрим следующее определение представления:

CREATE VIEW TopView AS 
SELECT TOP 50 PERCENT * FROM Person.Contact       
ORDER BY LastName       

Затем направим запрос к представлению:

SELECT * FROM TopView       

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

SELECT * FROM TopView       
ORDER BY LastName       

См. также

Основные понятия