Condividi tramite


SELECT (Entity SQL)

Specifica gli elementi restituiti da una query.

Sintassi

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

Argomenti

ALL Specifica che i duplicati possono essere visualizzati nel set di risultati. Il valore predefinito è ALL.

DISTINCT Specifica che solo i risultati univoci possono essere visualizzati nel set di risultati.

VALUE Consente di specificare un solo elemento e non di aggiungere un wrapper di riga.

topSubclause Qualsiasi espressione valida che indica il numero di primi risultati da restituire dalla query, del formato top(expr).

Il parametro LIMIT dell'operatore ORDER BY consente anche di selezionare i primi n elementi nel set di risultati.

aliasedExpr Espressione del formato:

expr come identifier | expr

expr Valore letterale o espressione.

Osservazioni:

La clausola SELECT viene valutata dopo la valutazione delle clausole FROM, GROUP BY e HAVING . La clausola SELECT può fare riferimento solo agli elementi attualmente inclusi nell'ambito (dalla clausola FROM o da ambiti esterni). Se è stata specificata una clausola GROUP BY, la clausola SELECT può fare riferimento solo agli alias per le chiavi GROUP BY. Il riferimento agli elementi della clausola FROM è consentito solo nelle funzioni di aggregazione.

L'elenco di una o più espressioni di query che seguono la parola chiave SELECT è noto come elenco di selezione o più formalmente come proiezione. La forma più generale di proiezione è una singola espressione di query. Se si seleziona un membro da un insieme collection1member1 , si produrrà una nuova raccolta di tutti i member1 valori per ogni oggetto in collection1, come illustrato nell'esempio seguente.

SELECT collection1.member1 FROM collection1

Ad esempio, se customers è una raccolta di tipo Customer con una proprietà Name di tipo string, la selezione Name da customers restituirà una raccolta di stringhe, come illustrato nell'esempio seguente.

SELECT customers.Name FROM customers AS c

È anche possibile usare la sintassi JOIN (FULL, INNER, LEFT, OUTER, ON e RIGHT). ON è obbligatorio per i inner join ed è consentito per i cross join.

Clausole Select di riga e valore

Entity SQL supporta due varianti della clausola SELECT. La prima variante, la selezione di riga, viene identificata dalla parola chiave SELECT e può essere usata per specificare uno o più valori che devono essere proiettati. Poiché un wrapper di riga viene aggiunto in modo implicito intorno ai valori restituiti, il risultato dell'espressione di query è sempre un multiset di righe.

Ogni espressione di query in una selezione di riga deve specificare un alias. Se non viene specificato alcun alias, Entity SQL tenta di generare un alias usando le regole di generazione degli alias.

L'altra variante della clausola SELECT, value select, è identificata dalla parola chiave SELECT VALUE. Consente di specificare un solo valore e non aggiunge un wrapper di riga.

Una selezione di riga è sempre espressa in termini di VALUE SELECT, come illustrato nell'esempio seguente.

SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C

Tutti e modificatori distinti

Entrambe le varianti di SELECT in Entity SQL consentono la specifica di un modificatore ALL o DISTINCT. Se viene specificato il modificatore DISTINCT, i duplicati vengono eliminati dalla raccolta prodotta dall'espressione di query (fino a e includendo la clausola SELECT). Se viene specificato il modificatore ALL, non viene eseguita alcuna eliminazione duplicata; ALL è l'impostazione predefinita.

Differenze rispetto a Transact-SQL

A differenza di Transact-SQL, Entity SQL non supporta l'uso dell'argomento * nella clausola SELECT. Entity SQL consente invece alle query di proiettare interi record facendo riferimento agli alias della raccolta dalla clausola FROM, come illustrato nell'esempio seguente.

SELECT * FROM T1, T2

L'espressione di query Transact-SQL precedente è espressa in Entity SQL nel modo seguente.

SELECT a1, a2 FROM T1 AS a1, T2 AS a2

Esempio

La query Entity SQL seguente usa l'operatore SELECT per specificare gli elementi da restituire da una query. La query si basa sul modello AdventureWorks Sales. Per compilare ed eseguire questa query, seguire questa procedura:

  1. Seguire la procedura descritta in Procedura: Eseguire una query che restituisce risultati StructuralType.

  2. Passare la query seguente come argomento al ExecuteStructuralTypeQuery metodo :

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

Vedere anche