Сортировка строк с использованием предложения ORDER BY
Предложение ORDER BY сортирует результаты запроса по одному или нескольким столбцам размером до 8 060 байт. Дополнительные сведения о максимальном размере предложения ORDER BY см. в разделе Предложение ORDER BY (Transact-SQL).
В Microsoft SQL Server 2005 возможно указание упорядочивающих столбцов из тех таблиц в предложении 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