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 nel set di risultati possono essere inclusi duplicati. Il valore predefinito è ALL.
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)
.
Il parametro LIMIT dell'operatore ORDER BY consente inoltre di selezionare i primi n elementi nel set di risultati.
aliasedExpr
Un'espressione nel formato:
expr
come identifier
| expr
expr
Un valore letterale o un’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 member1
da una raccolta collection1
, verrà creata una nuova raccolta di tutti i valori di member1
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 seleziona Name
da customers
verrà creata 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 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 usata 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 usando 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 FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM 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'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
Nella query Entity SQL seguente viene usato 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 How to: Execute a Query that Returns StructuralType Results.
Passare la query seguente come argomento al metodo
ExecuteStructuralTypeQuery
:
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product WHERE product.ListPrice < @price