SELECT (Entity SQL)
Určuje prvky vrácené dotazem.
Syntaxe
SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
[{ , aliasedExpr }] FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause ]
-- or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause
Argumenty
ALL Určuje, že duplicity mohou být zobrazeny v sadě výsledků. All je výchozí hodnota.
DISTINCT Určuje, že se v sadě výsledků můžou zobrazit pouze jedinečné výsledky.
HODNOTA Umožňuje zadat pouze jednu položku a nepřidá se do obálky řádku.
topSubclause
Libovolný platný výraz, který označuje počet prvních výsledků, které se mají vrátit z dotazu formuláře top(expr)
.
Parametr LIMIT operátoru ORDER BY umožňuje také vybrat první n položek v sadě výsledků.
aliasedExpr
Výraz formuláře:
expr
Jako identifier
| expr
expr
Literál nebo výraz.
Poznámky
Klauzule SELECT se vyhodnocuje po vyhodnocení klauzulí FROM, GROUP BY a HAVING . Klauzule SELECT může odkazovat pouze na položky, které jsou aktuálně v oboru (z klauzule FROM nebo z vnějších oborů). Pokud byla zadána klauzule GROUP BY, klauzule SELECT může odkazovat pouze na aliasy pro klíče GROUP BY. Odkaz na položky klauzule FROM je povolen pouze v agregačních funkcích.
Seznam jednoho nebo více výrazů dotazu za klíčovým slovem SELECT se označuje jako seznam výběrů nebo formálněji jako projekce. Nejobecnější forma projekce je jeden výraz dotazu. Pokud vyberete člena member1
z kolekce collection1
, vytvoříte novou kolekci všech member1
hodnot pro každý objekt v collection1
souboru , jak je znázorněno v následujícím příkladu.
SELECT collection1.member1 FROM collection1
Pokud customers
je například kolekce typu Customer
, která má vlastnost Name
typu string
, výběr Name
z customers
bude poskytovat kolekci řetězců, jak je znázorněno v následujícím příkladu.
SELECT customers.Name FROM customers AS c
Je také možné použít syntaxi JOIN (FULL, INNER, LEFT, OUTER, ON a RIGHT). On je vyžadován pro vnitřní spojení a je povolen nto pro křížové spojení.
Klauzule Výběr řádků a hodnot
Entity SQL podporuje dvě varianty klauzule SELECT. První varianta, výběr řádku, je identifikována klíčovým slovem SELECT a lze ji použít k určení jedné nebo více hodnot, které mají být promítnuty. Vzhledem k tomu, že obálka řádku se implicitně přidává kolem vrácených hodnot, je výsledkem výrazu dotazu vždy více sad řádků.
Každý výraz dotazu ve výběru řádku musí určovat alias. Pokud není zadán žádný alias, entity SQL se pokusí vygenerovat alias pomocí pravidel generování aliasů.
Druhá varianta klauzule SELECT, value select, je identifikována klíčovým slovem SELECT VALUE. Umožňuje zadat pouze jednu hodnotu a nepřidá obálku řádku.
Výběr řádku je vždy vyjádřitelný z hlediska FUNKCE VALUE SELECT, jak je znázorněno v následujícím příkladu.
SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C
Modifikátory all a distinct
Obě varianty select v Entity SQL umožňují specifikaci modifikátoru ALL nebo DISTINCT. Pokud je zadán modifikátor DISTINCT, duplicity se eliminují z kolekce vytvořené výrazem dotazu (až do klauzule SELECT a včetně klauzule SELECT). Je-li zadán modifikátor ALL, není provedena žádná duplicitní eliminace; All je výchozí hodnota.
Rozdíly oproti jazyku Transact-SQL
Na rozdíl od jazyka Transact-SQL entity SQL nepodporuje použití argumentu * v klauzuli SELECT. Místo toho Entity SQL umožňuje dotazům projektovat celé záznamy odkazováním na aliasy kolekce z klauzule FROM, jak je znázorněno v následujícím příkladu.
SELECT * FROM T1, T2
Předchozí výraz dotazu Transact-SQL je vyjádřen v Entity SQL následujícím způsobem.
SELECT a1, a2 FROM T1 AS a1, T2 AS a2
Příklad
Následující dotaz Entity SQL používá operátor SELECT k určení prvků, které mají být vráceny dotazem. 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 product FROM AdventureWorksEntities.Products
AS product WHERE product.ListPrice < @price