Verwenden der FROM-Klausel

Die FROM-Klausel ist in allen SELECT-Anweisungen erforderlich, in denen Daten aus Tabellen oder Sichten abgerufen werden. Verwenden Sie die FROM-Klausel für folgende Vorgänge:

  • Auflisten der Tabellen und Sichten, die die Spalten enthalten, auf die in der Auswahlliste und in der WHERE-Klausel verwiesen wird. Den Tabellen- oder Sichtnamen kann mithilfe der AS-Klausel ein Alias zugeordnet werden.

  • Join von Elementarten. Diese werden durch in der ON-Klausel angegebene Joinbedingungen gekennzeichnet.

Die FROM-Klausel ist eine Liste mit Trennzeichentrennung; sie enthält Namen von Tabellen und Sichten sowie JOIN-Klauseln.

Transact-SQL besitzt Erweiterungen, die das Angeben von Objekten, bei denen es sich nicht um Tabellen oder Sichten handelt, in der FROM-Klausel unterstützen. Diese Objekte geben ein Resultset (OLE DB-Bezeichnung: Rowset) zurück, das eine virtuelle Tabelle bildet. Die SELECT-Anweisung wird dann ausgeführt, als sei das Resultset eine Tabelle.

Die FROM-Klausel kann Folgendes angeben:

  • Eine oder mehrere Tabelle(n) oder Sicht(en). Beispiel:

    USE AdventureWorks2008R2;
    GO
    SELECT *
    FROM Sales.SalesOrderHeader
    
  • Verknüpfungen zwischen zwei oder mehr Tabellen oder Sichten:

    USE AdventureWorks2008R2;
    GO
    SELECT Cst.CustomerID, Sord.OrderQty, Ord.ShipDate, Ord.Freight 
    FROM AdventureWorks2008R2.Sales.Customer AS Cst
    JOIN AdventureWorks2008R2.Sales.SalesOrderHeader AS Ord
       ON Cst.CustomerID = Ord.CustomerID
    JOIN AdventureWorks2008R2.Sales.SalesOrderDetail AS Sord
       ON Sord.SalesOrderID = Ord.SalesOrderID;
    
  • Eine oder mehrere abgeleitete Tabellen, bei denen es sich um SELECT-Anweisungen in der FROM-Klausel handelt, auf die durch einen Alias oder einen vom Benutzer angegebenen Namen verwiesen wird. Das Resultset der SELECT-Anweisung in der FROM-Klausel bildet eine Tabelle, die von der äußeren SELECT-Anweisung verwendet wird. Die folgende SELECT-Anweisung verwendet z. B. eine abgeleitete Tabelle zum Zurückgeben der Stadt, in der jeder Mitarbeiter wohnt:

    USE AdventureWorks2008R2 ;
    GO
    SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name,
     d.City
    FROM Person.Person AS p
    INNER JOIN HumanResources.Employee AS e 
       ON p.BusinessEntityID = e.BusinessEntityID 
    INNER JOIN Person.BusinessEntityAddress AS bea 
       ON e.BusinessEntityID = bea.BusinessEntityID 
    INNER JOIN (SELECT AddressID, City FROM Person.Address) AS d
       ON bea.AddressID = d.AddressID
    
  • ORDER BY p.LastName, p.FirstName; Zusätzlich zu Joins kann der APPLY-Operator in der FROM-Klausel verwendet werden, um die Eingabe auf der rechten Seite, wobei es sich üblicherweise um eine Funktion mit Tabellenrückgabe handelt, im Hinblick auf jede Zeile der Eingabetabelle auf der linken Seite auszuwerten und die Ergebnisse aus all diesen Auswertungen zusammenzuführen. Weitere Informationen finden Sie unter Verwenden von APPLY.

  • Die PIVOT- und UNPIVOT-Operatoren können in der FROM-Klausel verwendet werden, um die Eingabetabelle umzuformen. Der PIVOT-Operator generiert in der Ausgabe neue Spalten basierend auf den Werten in Spalten aus der Eingabe. Weitere Informationen finden Sie unter Verwenden von PIVOT und UNPIVOT.

  • Eine oder mehrere Tabellen oder Sichten von einem mit sp_addlinkedserver definierten Verbindungsserver. Ein Verbindungsserver kann eine beliebige OLE DB-Datenquelle sein.

  • Ein OLE DB-Rowset, das von der OPENROWSET- oder von der OPENQUERY-Funktion zurückgegeben wird.

Die Grundlage der verteilten Abfragen von SQL Server sind Verbindungsserver, OPENROWSET und OPENQUERY. Sie ermöglichen das Abfragen oder Ändern von Daten in jeder OLE DB-Datenquelle im Rahmen von Transact-SQL-Anweisungen.

SELECT-Anweisungen ohne FROM-Klausel

SELECT-Anweisungen, die keine Daten aus Tabellen in der Datenbank auswählen, benötigen keine FROM-Klausel. Diese SELECT-Anweisungen wählen nur Daten aus lokalen Variablen oder Transact-SQL-Funktionen aus, die sich nicht auf eine Spalte beziehen, wie z. B.:

SELECT @MyIntVariable
SELECT @@VERSION
SELECT DB_ID('AdventureWorks2008R2')