Freigeben über


SELECT (Entity SQL)

Gibt die von einer Abfrage zurückgegebenen Elemente an.

Syntax

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

Argumente

ALL Gibt an, dass Duplikate im Resultset angezeigt werden können. ALL ist die Standardeinstellung.

DISTINCT Gibt an, dass nur eindeutige Ergebnisse im Resultset angezeigt werden können.

VALUE Lässt nur ein Element anzugeben und fügt keinen Zeilenwrapper hinzu.

topSubclause Ein gültiger Ausdruck, der die Anzahl der ersten Ergebnisse angibt, die aus der Abfrage zurückgegeben werden sollen, des Formulars top(expr).

Mit dem LIMIT-Parameter des OPERATOR ORDER BY können Sie auch die ersten n Elemente im Resultset auswählen.

aliasedExpr Ein Ausdruck des Formulars:

expr als identifier | expr

expr Ein Literal oder Ausdruck.

Bemerkungen

Die SELECT-Klausel wird ausgewertet, nachdem die FROM-, GROUP BY- und HAVING-Klauseln ausgewertet wurden. Die SELECT-Klausel kann sich nur auf aktuell im Bereich (der FROM-Klausel oder äußerer Bereiche) befindliche Elemente beziehen. Wenn eine GROUP BY-Klausel angegeben wurde, darf die SELECT-Klausel nur auf die Aliase der GROUP BY-Schlüssel verweisen. Verweise auf Elemente der FROM-Klausel sind nur in Aggregatfunktionen zulässig.

Die Liste von einem oder mehreren auf das SELECT-Schlüsselwort folgenden Abfrageausdrücken wird als Auswahlliste oder Projektion bezeichnet. Die allgemeinste Form der Projektion ist ein einzelner Abfrageausdruck. Durch Auswahl eines Members member1 aus einer Auflistung collection1wird eine neue Auflistung aller Werte member1 für jedes Objekt in collection1erstellt. Dies wird im folgenden Beispiel dargestellt.

SELECT collection1.member1 FROM collection1

Wenn z. B. customers eine Auflistung vom Typ Customer ist, der über die Eigenschaft Name vom Typ stringverfügt, wird durch die Auswahl von Name aus customers eine Auflistung von Zeichenfolgen erstellt. Dies wird im folgenden Beispiel dargestellt.

SELECT customers.Name FROM customers AS c

Es kann auch JOIN-Syntax (FULL, INNER, LEFT, OUTER, ON und RIGHT) verwendet werden. ON ist für innere Verknüpfungen erforderlich und bei Cross Joins nicht zulässig.

Zeilen- und Wertauswahlklauseln

Entity SQL unterstützt zwei Varianten der SELECT-Klausel. Die erste Variante, Zeilenauswahl, wird durch das SELECT-Schlüsselwort identifiziert und kann verwendet werden, um einen oder mehrere Werte anzugeben, die projiziert werden sollen. Da ein Zeilenwrapper implizit um die zurückgegebenen Werte herum hinzugefügt wird, ist das Ergebnis des Abfrageausdrucks immer eine Mehrfachmenge von Zeilen.

In jedem Abfrageausdruck in einer Zeilenauswahl muss ein Alias angegeben werden. Wenn kein Alias angegeben ist, versucht Entity SQL, einen Alias mithilfe der Aliasgenerierungsregeln zu generieren.

Die andere Variante der SELECT-Klausel, Wertauswahl, wird durch das SELECT VALUE-Schlüsselwort angegeben. Es ermöglicht die Angabe nur eines Werts, und fügt keinen Zeilen-Wrapper hinzu.

Eine Zeilenauswahl ist stets mithilfe von VALUE SELECT ausdrückbar. Dies wird im folgenden Beispiel illustriert.

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

Die Modifizierer ALL und DISTINCT

Beide Varianten von SELECT in Entity SQL ermöglichen die Spezifikation eines ALL- oder DISTINCT-Modifizierers. Wenn der DISTINCT-Modifizierer angegeben wird, werden Duplikate aus der vom Abfrageausdruck erstellten Auflistung entfernt (bis zur und einschließlich der SELECT-Klausel). Wenn der ALL-Modifizierer angegeben ist, werden Duplikate nicht entfernt. Dies ist die Standardeinstellung.

Unterschiede zu Transact-SQL

Im Gegensatz zu Transact-SQL unterstützt Entity SQL die Verwendung des *-Arguments in der SELECT-Klausel nicht. Stattdessen ermöglicht Entity SQL Abfragen, ganze Datensätze zu projizieren, indem auf die Sammlungsaliasen aus der FROM-Klausel verwiesen wird, wie im folgenden Beispiel dargestellt.

SELECT * FROM T1, T2

Der vorherige Transact-SQL-Abfrageausdruck wird wie folgt in Entity SQL ausgedrückt.

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

Beispiel

In der folgenden Entity SQL-Abfrage wird der SELECT-Operator verwendet, um die von einer Abfrage zurückzugebenden Elemente anzugeben. Diese Abfrage beruht auf dem "AdventureWorks Sales"-Modell. Führen Sie folgende Schritte aus, um diese Abfrage zu kompilieren und auszuführen:

  1. Verwenden Sie das Verfahren unter How to: Execute a Query that Returns StructuralType Results.

  2. Übergeben Sie die folgende Abfrage als Argument an die ExecuteStructuralTypeQuery -Methode:

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

Siehe auch