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 collection1souboru , 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:

  1. Postupujte podle pokynů v části Postupy: Provedení dotazu, který vrací výsledky typu StructuralType.

  2. Jako argument metody ExecuteStructuralTypeQuery předejte následující dotaz:

SELECT VALUE product FROM AdventureWorksEntities.Products 
    AS product WHERE product.ListPrice < @price

Viz také