Share via


SELECT (Entity SQL)

Gibt die von einer Abfrage zurückgegebenen Elemente an.

SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr 
      [{ , aliasedExpr }]
or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr

Argumente

  • ALL
    Gibt an, dass im Resultset Duplikate zulässig sind. Der Standardwert ist ALL.
  • DISTINCT
    Gibt an, dass im Resultset nur eindeutige Ergebnisse zulässig sind.
  • VALUE
    Ermöglicht die Angabe nur eines Elements, und fügt keinen Zeilen-Wrapper hinzu.
  • topSubclause
    Jeder gültige Ausdruck von der Form top (expr), der die Anzahl der von der Abfrage zurückzugebenden Ergebnisse angibt.

    Mit dem LIMIT-Parameter des ORDER BY (Entity SQL)-Operators können ebenfalls die ersten n Elemente des Resultsets ausgewählt werden.

  • aliasedExpr
    Ein Ausdruck der Form:

    expr as identifier | expr

  • expr
    Ein Literal oder ein Ausdruck.

Hinweise

Die SELECT-Klausel wird nach der Auswertung der FROM (Entity SQL), GROUP BY (Entity SQL)-Klausel und der HAVING (Entity SQL)-Klausel ausgewertet. 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 Membersmember1aus einer Auflistung collection1 wird eine neue Auflistung aller Wertemember1für jedes Objekt in collection1 erstellt. Dies wird im folgenden Beispiel dargestellt.

SELECT collection1.member1 FROM collection1

Wenn z. B.customerseine Auflistung vom Typ Customer ist, der über die EigenschaftNamevom Typ string verfügt, wird durch die Auswahl vonNameauscustomerseine 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 angegeben und kann zur Angabe von einem oder mehreren Werten verwendet werden, die herausprojiziert werden sollen. Da die zurückgegebenen Werte implizit mit einem Zeilen-Wrapper umschlossen werden, ist das Ergebnis des Abfrageausdrucks stets ein Multiset von Zeilen.

In jedem Abfrageausdruck in einer Zeilenauswahl muss ein Alias angegeben werden. Wenn kein Alias angegeben wird, generiert Entity SQL mithilfe der Aliasgenerierungsregeln einen Alias.

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, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS c) 

Die Modifizierer ALL und DISTINCT

Beide Varianten von SELECT in Entity SQL ermöglichen die Angabe eines ALL-Modifizierers oder eines 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 nicht die Verwendung des "*"-Arguments in der SELECT-Klausel. Stattdessen ermöglicht Entity SQL in Abfragen das Herausprojizieren ganzer Datensätze durch Verweise auf die Auflistungsaliase der FROM-Klausel. Dies wird im folgenden Beispiel illustriert.

SELECT * FROM T1, T2

Der vorherige Transact-SQL -Abfrageausdruck wird in Entity SQL wie folgt 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. Die Abfrage basiert auf dem AdventureWorks Sales-Modell. Führen Sie folgende Schritte durch, um diese Abfrage zu kompilieren und auszuführen:

  1. Verwenden Sie das Verfahren unter Gewusst wie: Ausführen einer Abfrage, die StructuralType-Ergebnisse zurückgibt (EntityClient).

  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

Verweis

TOP (Entity SQL)

Konzepte

Abfrageausdrücke (Entity SQL)
Entity SQL-Referenz