ORDER BY (Entity SQL)
Určuje pořadí řazení použité u objektů vrácených v příkazu SELECT.
Syntaxe
[ ORDER BY
{
order_by_expression [SKIP n] [LIMIT n]
[ COLLATE collation_name ]
[ ASC | DESC ]
}
[ ,…n ]
]
Argumenty
order_by_expression
Libovolný platný výraz dotazu určující vlastnost, podle které se má seřadit. Lze zadat více výrazů řazení. Posloupnost výrazů řazení v klauzuli ORDER BY definuje organizaci seřazené sady výsledků.
COLLATE {collation_name} Určuje, že by měla být provedena operace ORDER BY podle kolace zadané v collation_name
. Funkce COLLATE je použitelná pouze pro řetězcové výrazy.
ASC Určuje, že hodnoty v zadané vlastnosti by měly být seřazeny vzestupně, od nejnižší hodnoty po nejvyšší hodnotu. Tato možnost je výchozí.
DESC Určuje, že hodnoty v zadané vlastnosti by měly být seřazeny sestupně, od nejvyšší hodnoty po nejnižší hodnotu.
Budou n
vybrány pouze první n
položky.
Přeskočit n
přeskočí první n
položky.
Poznámky
Klauzule ORDER BY se logicky použije na výsledek klauzule SELECT. Klauzule ORDER BY může odkazovat na položky v seznamu select pomocí jejich aliasů. Klauzule ORDER BY může také odkazovat na další proměnné, které jsou aktuálně v oboru. Pokud je však klauzule SELECT zadána s modifikátorem DISTINCT, klauzule ORDER BY může odkazovat pouze na aliasy z klauzule SELECT.
SELECT c AS c1 FROM cs AS c ORDER BY c1.e1, c.e2
Každý výraz v klauzuli ORDER BY musí být vyhodnocen jako určitý typ, který lze porovnat s seřazenou nerovností (menší než nebo větší než atd.). Tyto typy jsou obecně skalární primitivy, jako jsou čísla, řetězce a kalendářní data. Typy řádků srovnatelných typů jsou také seřazené jako srovnatelné.
Pokud váš kód iteruje přes seřazenou sadu jinou než pro projekce nejvyšší úrovně, není zaručeno, že se jeho pořadí zachová.
V následující ukázce je zaručeno zachování pořadí:
SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName
V následujícím dotazu se pořadí vnořeného dotazu ignoruje:
SELECT C2.FirstName, C2.LastName
FROM (SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName) as C2
Pokud chcete mít seřazenou operaci UNION, UNION ALL, EXCEPT nebo INTERSECT, použijte následující vzor:
SELECT ...
FROM ( UNION/EXCEPT/INTERSECT operation )
ORDER BY ...
Omezená klíčová slova
Při použití klauzule musí být následující klíčová slova uzavřena do ORDER BY
uvozovek:
KŘÍŽ
PLNÉ
KEY
LEFT
OBJEDNÁVKY
VNĚJŠÍ
RIGHT
ROW
VALUE
Řazení vnořených dotazů
V Entity Frameworku lze vnořený výraz umístit kdekoli v dotazu; Pořadí vnořeného dotazu se nezachová.
Následující dotaz vypíše výsledky podle příjmení:
SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName
V následujícím dotazu se pořadí vnořeného dotazu ignoruje:
SELECT C2.FirstName, C2.LastName
FROM (SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName) as C2
Příklad
Následující dotaz Entity SQL používá operátor ORDER BY k určení pořadí řazení použitého u objektů vrácených v příkazu SELECT. Dotaz je založený na prodejním modelu AdventureWorks. Chcete-li tento dotaz zkompilovat a spustit, postupujte takto:
Postupujte podle pokynů v části Postupy: Provedení dotazu, který vrací výsledky typu StructuralType.
Jako argument metody
ExecuteStructuralTypeQuery
předejte následující dotaz:
SELECT VALUE p FROM AdventureWorksEntities.Products
AS p ORDER BY p.ListPrice