SELECT (Entity SQL)
Specifica gli elementi restituiti da una query.
SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
[{ , aliasedExpr }]
or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr
Argomenti
- ALL
Specifica che nel set di risultati possono essere inclusi duplicati. ALL è l'argomento predefinito.
- DISTINCT
Specifica che nel set di risultati possono essere inclusi solo risultati univoci.
- VALUE
Consente di specificare un solo elemento e non aggiunge un wrapper di riga.
topSubclause
Qualsiasi espressione valida che indica il numero dei primi risultati che devono essere restituiti dalla query, nel formato top (expr).Anche il parametro LIMIT dell'operatore ORDER BY (Entity SQL) consente di selezionare i primi n elementi nel set di risultati.
aliasedExpr
Espressione nel formato seguente:expr as identifier | expr
- expr
Valore letterale o espressione.
Osservazioni
La clausola SELECT viene valutata dopo le clausole FROM (Entity SQL), GROUP BY (Entity SQL) e HAVING (Entity SQL). 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 membromember1
da una raccolta collection1
, verrà creata una nuova raccolta di tutti i valori dimember1
per ogni oggetto di collection1
, come illustrato nell'esempio seguente.
SELECT collection1.member1 FROM collection1
Se, ad esempio,customers
è una raccolta di tipo Customer con una proprietàName
di tipo string, se si selezionaName
dacustomers
verrà creata una raccolta di stringhe, come illustrato nell'esempio seguente.
SELECT customers.Name FROM customers AS c
È anche possibile utilizzare la sintassi JOIN (FULL, INNER, LEFT, OUTER, ON e RIGHT). ON è obbligatorio per gli inner join e non è consentito per i cross join.
Clausole SELECT per la selezione di righe e di valori
Entity SQL supporta due varianti della clausola SELECT. La prima variante, per la selezione di righe, è identificata dalla parola chiave SELECT e può essere utilizzata per specificare uno o più valori da proiettare. Poiché ai valori restituiti viene aggiunto in modo implicito un wrapper di riga, il risultato dell'espressione di query è sempre un multiset di righe.
In ogni espressione di query in una clausola per la selezione di righe deve essere specificato un alias. Se non viene specificato alcun alias, in Entity SQL viene eseguito un tentativo di generare un alias utilizzando le regole di generazione di alias.
L'altra variante della clausola SELECT, per la selezione di valori, è identificata dalla parola chiave SELECT VALUE. Questo tipo di clausola consente di specificare un solo valore e non aggiunge un wrapper di riga.
Una clausola per la selezione di righe può essere sempre espressa in termini di VALUE SELECT, come illustrato nell'esempio seguente.
SELECT 1 AS a, "abc" AS b, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS c)
Modificatori ALL e DISTINCT
Entrambe le varianti della clausola SELECT in Entity SQL consentono di specificare un modificatore ALL o DISTINCT. Se viene specificato il modificatore DISTINCT, i duplicati vengono eliminati dalla raccolta prodotta dall'espressione di query, fino alla clausola SELECT inclusa. Se viene specificato il modificatore ALL, non viene eseguita alcuna eliminazione dei duplicati. ALL rappresenta l'impostazione predefinita.
Differenze rispetto a Transact-SQL
A differenza di Transact-SQL, in Entity SQL non è supportato l'utilizzo 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 viene espressa in Entity SQL nel modo seguente.
SELECT a1, a2 FROM T1 AS a1, T2 AS a2
Esempio
Nella query Entity SQL seguente viene utilizzato l'operatore SELECT per specificare gli elementi che devono essere restituiti da una query. La query è basata sul modello Sales di AdventureWorks. Per compilare ed eseguire questa query, effettuare le operazioni seguenti:
Seguire la procedura indicata in Procedura: eseguire una query che restituisce risultati StructuralType (EntityClient).
Passare la query seguente come argomento al metodo
ExecuteStructuralTypeQuery
:
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product where product.ListPrice < @price