Freigeben über


FROM (Entity SQL)

Gibt die auflistung an, die in SELECT-Anweisungen verwendet wird.

Syntax

FROM expression [ ,...n ] AS C

Argumente

expression
Jeder gültige Abfrageausdruck, der eine Auflistung zur Verwendung als Quelle in einer SELECT Anweisung zurückgibt.

Bemerkungen

Eine FROM Klausel ist eine durch Trennzeichen getrennte Liste eines oder mehrerer FROM Klauselelemente. Die FROM Klausel kann verwendet werden, um eine oder mehrere Quellen für eine SELECT Anweisung anzugeben. Die einfachste Form einer FROM Klausel ist ein einzelner Abfrageausdruck, der eine Auflistung und einen Alias identifiziert, der als Quelle in einer SELECT Anweisung verwendet wird, wie im folgenden Beispiel veranschaulicht:

FROM C as c

FROM-Klauselelemente

Jedes FROM Klauselelement bezieht sich auf eine Quellauflistung in der Entity SQL-Abfrage. Entity SQL unterstützt die folgenden Klassen von FROM Klauselelementen: einfache FROM Klauselelemente, JOIN FROM Klauselnelemente und APPLY FROM Klauselelemente. Jedes dieser FROM Klauselnelemente wird in den folgenden Abschnitten ausführlicher beschrieben.

Einfaches FROM-Klauselnelement

Das einfachste FROM Klauselelement ist ein einzelner Ausdruck, der eine Auflistung und einen Alias identifiziert. Der Ausdruck kann einfach ein Entitätssatz oder eine Unterabfrage oder ein anderer Ausdruck sein, der ein Auflistungstyp ist. Es folgt ein Beispiel:

LOB.Customers as c

Die Aliasspezifikation ist optional. Eine alternative Spezifikation des obigen Klauselelements könnte folgendes sein:

LOB.Customers

Wenn kein Alias angegeben ist, versucht Entity SQL, einen Alias basierend auf dem Sammlungsausdruck zu generieren.

JOIN FROM Clause Item

Ein JOIN FROM Klauselelement stellt eine Verknüpfung zwischen zwei FROM Klauselelementen dar. Entity SQL unterstützt Kreuzverknnungen, innere Verknüpfungen, linke und rechte äußere Verknüpfungen und vollständige äußere Verknüpfungen. Alle diese Verknüpfungen werden ähnlich wie in Transact-SQL unterstützt. Wie bei Transact-SQL müssen die beiden FROM klauselnelemente, die an der JOIN Transaktion beteiligt sind, unabhängig sein. Das heißt, sie können nicht korreliert werden. A CROSS APPLY oder OUTER APPLY kann für diese Fälle verwendet werden.

Kreuzverknnungen

Ein CROSS JOIN Abfrageausdruck erzeugt das kartesische Produkt der beiden Auflistungen, wie im folgenden Beispiel dargestellt:

FROM C AS c CROSS JOIN D as d

Innere Verknüpfungen

Eine INNER JOIN ergibt ein eingeschränktes kartesisches Produkt der beiden Sammlungen, wie im folgenden Beispiel dargestellt:

FROM C AS c [INNER] JOIN D AS d ON e

Der vorherige Abfrageausdruck verarbeitet eine Kombination aller Elemente der Auflistung auf der linken Seite, die mit jedem Element der Auflistung auf der rechten Seite gekoppelt ist, wobei die ON Bedingung wahr ist. Wenn keine ON Bedingung angegeben ist, wird ein INNER JOIN Wert von einem CROSS JOIN.

Linke äußere Verknüpfungen und rechte äußere Verknüpfungen

Ein OUTER JOIN Abfrageausdruck erzeugt ein eingeschränktes kartesisches Produkt der beiden Auflistungen, wie im folgenden Beispiel veranschaulicht:

FROM C AS c LEFT OUTER JOIN D AS d ON e

Der vorherige Abfrageausdruck verarbeitet eine Kombination aller Elemente der Auflistung auf der linken Seite, die mit jedem Element der Auflistung auf der rechten Seite gekoppelt ist, wobei die ON Bedingung wahr ist. Wenn die ON Bedingung falsch ist, verarbeitet der Ausdruck weiterhin eine einzelne Instanz des Elements auf der linken Seite, die mit dem Element auf der rechten Seite gekoppelt ist, mit dem Wert NULL.

Eine RIGHT OUTER JOIN kann auf ähnliche Weise ausgedrückt werden.

Vollständige äußere Verknüpfungen

Ein explizites FULL OUTER JOIN Produkt erzeugt ein eingeschränktes kartesisches Produkt der beiden Sammlungen, wie im folgenden Beispiel dargestellt:

FROM C AS c FULL OUTER JOIN D AS d ON e

Der vorherige Abfrageausdruck verarbeitet eine Kombination aller Elemente der Auflistung auf der linken Seite, die mit jedem Element der Auflistung auf der rechten Seite gekoppelt ist, wobei die ON Bedingung wahr ist. Wenn die ON Bedingung falsch ist, verarbeitet der Ausdruck weiterhin eine Instanz des Elements auf der linken Seite, die mit dem Element auf der rechten Seite gekoppelt ist, mit dem Wert NULL. Außerdem wird eine Instanz des Elements rechts mit dem Element auf der linken Seite mit dem Wert NULL verarbeitet.

Hinweis

Um die Kompatibilität mit SQL-92 beizubehalten, ist das OUTER-Schlüsselwort in Transact-SQL optional. LEFT JOIN RIGHT JOINDaher sind , , und FULL JOIN sind Synonyme für LEFT OUTER JOIN, RIGHT OUTER JOINund FULL OUTER JOIN.

APPLY-Klauselelement

Entity SQL unterstützt zwei Arten von APPLY: CROSS APPLY und OUTER APPLY.

A CROSS APPLY erzeugt eine eindeutige Kopplung der einzelnen Elemente der Auflistung auf der linken Seite mit einem Element der Auflistung, das durch auswerten des Ausdrucks auf der rechten Seite erzeugt wird. Bei einem CROSS APPLYAusdruck auf der rechten Seite ist der Ausdruck funktionell von dem Element auf der linken Seite abhängig, wie im folgenden zugeordneten Auflistungsbeispiel veranschaulicht:

SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f

Das Verhalten ähnelt CROSS APPLY der Verknüpfungsliste. Wenn der Ausdruck auf der rechten Seite eine leere Auflistung auswertet, erzeugt dies CROSS APPLY keine Paarungen für diese Instanz des Elements auf der linken Seite.

Eine OUTER APPLY ähnelt einer CROSS APPLY, außer dass eine Kopplung immer noch erzeugt wird, auch wenn der Ausdruck auf der rechten Seite zu einer leeren Auflistung ausgewertet wird. Im Folgenden sehen Sie ein Beispiel für folgendes OUTER APPLY:

SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f

Hinweis

Im Gegensatz zu Transact-SQL ist es nicht erforderlich, einen expliziten unnesten Schritt in Entity SQL auszuführen.

Hinweis

CROSS und OUTER APPLY Operatoren wurden in SQL Server 2005 eingeführt. In einigen Fällen kann die Abfragepipeline Transact-SQL erzeugen, die und/oder OUTER APPLY Operatoren enthältCROSS APPLY. Da einige Back-End-Anbieter, einschließlich Versionen von SQL Server vor SQL Server 2005, diese Operatoren nicht unterstützen, können solche Abfragen nicht auf diesen Back-End-Anbietern ausgeführt werden.

Einige typische Szenarien, die zur Anwesenheit von CROSS APPLY und/oder OUTER APPLY Operatoren in der Ausgabeabfrage führen können, sind die folgenden: eine korrelierte Unterabfrage mit Paging; AnyElement über eine korrelierte Unterabfrage oder eine sammlung, die von der Navigation erzeugt wird; LINQ-Abfragen, die Gruppierungsmethoden verwenden, die eine Elementauswahl akzeptieren; eine Abfrage, in der eine CROSS APPLY oder eine OUTER APPLY explizit angegeben wird; eine Abfrage, die über ein DEREFREF Konstrukt verfügt.

Mehrere Auflistungen in der FROM-Klausel

Die FROM Klausel kann mehrere durch Kommas getrennte Auflistung enthalten. In diesen Fällen wird davon ausgegangen, dass die Sammlungen miteinander verknüpft werden. Stellen Sie sich diese als n-wege CROSS JOIN vor.

Im folgenden Beispiel sind und D unabhängige Auflistungen sind, C aber c.Names von Cdenen abhängig sind.

FROM C AS c, D AS d, c.Names AS e

Das vorherige Beispiel entspricht logisch dem folgenden Beispiel:

FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e

Linker Korrelation

Elemente in der Klausel können auf Elemente verweisen, die FROM in früheren Klauseln angegeben sind. Im folgenden Beispiel sind sie D unabhängige Auflistungen, C sind jedoch c.Names abhängig vonC:

from C as c, D as d, c.Names as e

Dies entspricht logisch folgenden:

from (C as c join D as d) cross apply c.Names as e

Semantik

Logisch wird davon ausgegangen, dass die Auflistungen in der FROM Klausel Teil einer n"-way cross join" sind (außer bei einer 1-Wege-Kreuzverknung). Aliase in der FROM Klausel werden von links nach rechts verarbeitet und dem aktuellen Bereich für spätere Verweise hinzugefügt. Die FROM Klausel wird angenommen, um eine Mehrfachmenge von Zeilen zu erzeugen. Es gibt ein Feld für jedes Element in der FROM Klausel, das ein einzelnes Element aus diesem Auflistungselement darstellt.

Die FROM Klausel erzeugt logisch eine Mehrfachmenge von Zeilen vom Typ Row(c, d, e), wobei Felder c, d und e als Elementtyp von C, Dund c.Names.

Entity SQL führt einen Alias für jedes einfache FROM Klauselelement im Bereich ein. Im folgenden FROM-Klauselnausschnitt sind z. B. die in den Bereich eingeführten Namen c, d und e.

from (C as c join D as d) cross apply c.Names as e

In Entity SQL (im Gegensatz zu Transact-SQL) führt die FROM Klausel nur die Aliase in den Bereich ein. Alle Verweise auf Spalten (Eigenschaften) dieser Auflistungen müssen mit dem Alias qualifiziert werden.

Abrufen von Schlüsseln aus geschachtelten Abfragen

Bestimmte Arten von Abfragen, die das Abrufen von Schlüsseln aus einer geschachtelten Abfrage erfordern, werden nicht unterstützt. Die folgende Abfrage ist beispielsweise gültig:

select c.Orders from Customers as c

Die folgende Abfrage ist jedoch ungültig, da die geschachtelte Abfrage keine Schlüssel enthält:

select {1} from {2, 3}

Siehe auch