SELECT (Entiteit SQL)
Hiermee geeft u de elementen op die worden geretourneerd door een query.
Syntaxis
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
Argumenten
ALL Geeft aan dat duplicaten kunnen worden weergegeven in de resultatenset. ALL is de standaardinstelling.
DISTINCT Geeft aan dat alleen unieke resultaten kunnen worden weergegeven in de resultatenset.
MET WAARDE kan slechts één item worden opgegeven en wordt niet toegevoegd aan een rij-wrapper.
topSubclause
Elke geldige expressie die het aantal eerste resultaten aangeeft dat moet worden geretourneerd uit de query, van het formulier top(expr)
.
Met de parameter LIMIT van de operator ORDER BY kunt u ook de eerste n items in de resultatenset selecteren.
aliasedExpr
Een expressie van het formulier:
expr
Als identifier
| expr
expr
Een letterlijke of expressie.
Opmerkingen
De SELECT-component wordt geëvalueerd nadat de component FROM, GROUP BY en HAVING is geëvalueerd. De SELECT-component kan alleen verwijzen naar items die momenteel binnen het bereik vallen (vanuit de FROM-component of vanuit buitenste bereiken). Als er een GROUP BY-component is opgegeven, mag de SELECT-component alleen verwijzen naar de aliassen voor de GROUP BY-sleutels. Het verwijzen naar de FROM-componentitems is alleen toegestaan in statistische functies.
De lijst met een of meer query-expressies na het trefwoord SELECT wordt de select-lijst genoemd, of formeel gezien als de projectie. De meest algemene vorm van projectie is één query-expressie. Als u een lid member1
uit een verzameling collection1
selecteert, maakt u een nieuwe verzameling van alle member1
waarden voor elk object in collection1
, zoals wordt geïllustreerd in het volgende voorbeeld.
SELECT collection1.member1 FROM collection1
Als dit bijvoorbeeld customers
een verzameling van het type Customer
is die een eigenschap Name
van het type string
heeft, levert een selectie Name
customers
van tekenreeksen op, zoals wordt geïllustreerd in het volgende voorbeeld.
SELECT customers.Name FROM customers AS c
Het is ook mogelijk om JOIN-syntaxis (FULL, INNER, LEFT, OUTER, ON en RIGHT) te gebruiken. AAN is vereist voor inner joins en is toegestaan voor cross joins.
Componenten voor rij- en waardeselectie
Entity SQL ondersteunt twee varianten van de SELECT-component. De eerste variant, rijselectie, wordt geïdentificeerd door het sleutelwoord SELECT en kan worden gebruikt om een of meer waarden op te geven die moeten worden geprojecteerd. Omdat een rijwikkelaar impliciet wordt toegevoegd rond de geretourneerde waarden, is het resultaat van de query-expressie altijd een multiset rijen.
Elke query-expressie in een rij selecteren moet een alias opgeven. Als er geen alias is opgegeven, probeert Entity SQL een alias te genereren met behulp van de regels voor het genereren van aliassen.
De andere variant van de SELECT-component, waardeselectie, wordt geïdentificeerd door het trefwoord SELECT VALUE. Hiermee kan slechts één waarde worden opgegeven en wordt er geen rijwikkelaar toegevoegd.
Een rijselectie kan altijd worden uitgedrukt in termen van VALUE SELECT, zoals wordt geïllustreerd in het volgende voorbeeld.
SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C
Alle en afzonderlijke modifiers
Beide varianten van SELECT in Entity SQL maken de specificatie van een ALL- of DISTINCT-wijzigingsfunctie mogelijk. Als de DISTINCT-modifier is opgegeven, worden duplicaten verwijderd uit de verzameling die wordt geproduceerd door de query-expressie (tot en met de SELECT-component). Als de ALL-modifier is opgegeven, wordt er geen dubbele verwijdering uitgevoerd; ALL is de standaardinstelling.
Verschillen met Transact-SQL
In tegenstelling tot Transact-SQL biedt Entity SQL geen ondersteuning voor het gebruik van het argument * in de SELECT-component. In plaats daarvan kunnen query's met Entity SQL volledige records uit projecteren door te verwijzen naar de verzamelingsaliassen uit de FROM-component, zoals wordt geïllustreerd in het volgende voorbeeld.
SELECT * FROM T1, T2
De vorige Transact-SQL-queryexpressie wordt op de volgende manier uitgedrukt in Entity SQL.
SELECT a1, a2 FROM T1 AS a1, T2 AS a2
Opmerking
De volgende Entiteit SQL-query maakt gebruik van de SELECT-operator om de elementen op te geven die moeten worden geretourneerd door een query. De query is gebaseerd op het AdventureWorks Sales Model. Voer de volgende stappen uit om deze query te compileren en uit te voeren:
Volg de procedure in Procedure: Voer een query uit die StructureleType-resultaten retourneert.
Geef de volgende query als argument door aan de
ExecuteStructuralTypeQuery
methode:
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product WHERE product.ListPrice < @price