Сортировка строк с использованием предложения ORDER BY
Предложение ORDER BY сортирует результаты запроса по одному или нескольким столбцам размером до 8 060 байт. Дополнительные сведения о максимальном размере предложения ORDER BY см. в разделе Предложение ORDER BY (Transact-SQL).
Начиная с версии SQL Server 2005 в SQL Server можно указать упорядочивающие столбцы из тех таблиц в предложении FROM, которые не указаны в списке SELECT. Имена столбцов, на которые содержатся ссылки в предложении ORDER BY, должны однозначно соответствовать столбцу в списке SELECT или столбцу таблицы в предложении FROM. Если в качестве имен столбцов в списке SELECT используются псевдонимы, только псевдонимы могут быть использованы в предложении ORDER BY. Аналогично, если в качестве имен таблиц в предложении FROM используются псевдонимы, только псевдонимы могут быть использованы для обозначения столбцов этих таблиц в предложении ORDER BY.
Сортировка может проводиться по возрастанию (ASC) или по убыванию (DESC). Если ни один из вариантов не указан, предполагается режим сортировки по возрастанию (ASC).
Следующий запрос возвращает результаты, упорядоченные по возрастанию ProductID:
USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID;
Если в предложении ORDER BY указано более одного столбца, процедуры сортировки являются вложенными. Следующая инструкция сортирует строки в таблице Production.Product сначала по подкатегории продукта по убыванию, а затем по цене ListPrice по возрастанию внутри каждой категории продуктов.
USE AdventureWorks2008R2;
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.Person в базе данных База данных AdventureWorks2008R2 определен с параметрами сортировки Latin1_General, но в приведенном ниже сценарии столбец возвращается по возрастанию с использованием параметров сортировки Traditional_Spanish.
USE AdventureWorks2008R2;
GO
SELECT LastName FROM Person.Person
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC;
GO
Нельзя использовать ORDER BY для столбцов, содержащих типы данных text, ntext, image и xml.
Предложение ORDER BY обеспечивает сортированный результат только для самой внешней инструкции SELECT в запросе. Например, рассмотрим следующее определение представления:
CREATE VIEW TopView AS
SELECT TOP 50 PERCENT * FROM Person.Person
ORDER BY LastName;
Затем направим запрос к представлению:
SELECT * FROM TopView;
Хотя в определении представления содержится предложение ORDER BY, это предложение ORDER BY используется только для определения строк, возвращаемых предложением TOP. При запросах к собственно представлению SQL Server не гарантирует, что результаты будут упорядочены, если это не было явно указано пользователем, как демонстрируется в следующем запросе:
SELECT * FROM TopView
ORDER BY LastName;