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


ORDER BY (язык Entity SQL)

Указывает порядок сортировки для объектов, возвращаемых инструкцией SELECT.

[ ORDER BY 
   {
            order_by_expression [SKIP n] [LIMIT n]
      [ COLLATE collation_name ]
      [ ASC | DESC ]
   }
   [ ,…n ] 
]

Аргументы

  • order_by_expression
    Любое допустимое выражение запроса, задающее свойство, по которому выполняется сортировка. Может быть указано несколько выражений сортировки. Последовательность выражений сортировки в предложении ORDER BY определяет порядок сортировки результирующего набора.
  • COLLATE {collation_name}
    Указывает, что операция ORDER BY должна выполняться в соответствии с параметрами сортировки, заданными в аргументе collation_name. COLLATE применяется только для строковых выражений.
  • ASC
    Указывает, что значения в указанном свойстве должны быть отсортированы в порядке возрастания, от меньшего к большему. Это режим сортировки по умолчанию.
  • DESC
    Указывает, что значения в указанном свойстве должны быть отсортированы в порядке убывания, от большего к меньшему.
  • LIMIT n
    Будут выбраны только первые n элементов.
  • SKIP n
    Пропускает первые n элементов.

Замечания

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

SELECT c AS c1 FROM cs AS c ORDER BY c1.e1, c.e2

Выражения в предложении ORDER BY должны иметь сравнимый тип, поскольку для упорядочивания производится сравнение элементов (меньше, больше и т. д.). Такими типами обычно являются скалярные примитивы — числа, строки и даты. Типы RowType для сравнимых типов также являются сравнимыми для упорядочивания.

Если код проходит по упорядоченному набору, отличному от проекции верхнего уровня, то сохранение порядка в выходных данных не гарантируется.

-- In the following sample, order is guaranteed to be preserved:
SELECT C1.FirstName, C1.LastName
        FROM AdventureWorks.Contact as C1
        ORDER BY C1.LastName

-- In the following query ordering of the nested query is ignored.
SELECT C2.FirstName, C2.LastName
    FROM (SELECT C1.FirstName, C1.LastName
        FROM AdventureWorks.Contact as C1
        ORDER BY C1.LastName) as C2

Получить упорядоченный результат выполнения операции UNION, UNION ALL, EXCEPT или INTERSECT можно следующим образом.

SELECT ...
FROM ( UNION/EXCEPT/INTERSECT operation )
ORDER BY ...

Служебные ключевые слова

Следующие ключевые слова при использовании в предложении ORDER BY необходимо заключать в кавычки.

  • CROSS

  • FULL

  • KEY

  • LEFT

  • ORDER

  • OUTER

  • RIGHT

  • ROW

  • VALUE

Упорядочение вложенных запросов

Платформа Entity Framework позволяет разместить вложенное выражение в любом месте запроса. Порядок вложенного запроса не сохраняется.

-- The following query will order the results by the last name.
SELECT C1.FirstName, C1.LastName
        FROM AdventureWorks.Contact as C1
        ORDER BY C1.LastName

-- In the following query, ordering of the nested query is ignored.
SELECT C2.FirstName, C2.LastName
    FROM (SELECT C1.FirstName, C1.LastName
        FROM AdventureWorks.Contact as C1
        ORDER BY C1.LastName) as C2

Примеры

В следующем запросе Entity SQL оператор ORDER BY задает порядок сортировки для объектов, возвращаемых инструкцией SELECT. Запрос основан на модели AdventureWorks Sales. Для компиляции и запуска этого запроса выполните следующие шаги.

  1. Следуйте инструкциям в разделе Как выполнить запрос, возвращающий результаты типа StructuralType (EntityClient).

  2. Передайте методу ExecuteStructuralTypeQuery в качестве аргумента следующий запрос:

SELECT VALUE p FROM AdventureWorksEntities.Product 
    AS p order by p.ListPrice

Далее показан вывод.

ProductID: 1
Name: Adjustable Race
ProductNumber: AR-5381
MakeFlag: False
ProductID: 2
Name: Bearing Ball
ProductNumber: BA-8327
MakeFlag: False
ProductID: 3
Name: BB Ball Bearing
ProductNumber: BE-2349
MakeFlag: True
ProductID: 4
Name: Headset Ball Bearings
ProductNumber: BE-2908
MakeFlag: False
ProductID: 316
Name: Blade
ProductNumber: BL-2036
MakeFlag: True
...

См. также

Справочник

SKIP (язык Entity SQL)
LIMIT (язык Entity SQL)
TOP (Entity SQL)

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

Выражения запросов (язык Entity SQL)
Справочник по Entity SQL