使用 FROM 子句

無論 SELECT 陳述式是從資料表或檢視擷取資料,FROM 子句對於每個 SELECT 陳述式而言都是必要的。使用 FROM 子句以便:

  • 列出其中包含選取清單與 WHERE 子句中所參考之資料行的資料表與檢視。資料表或檢視名稱可以使用 AS 子句來改成其他別名。
  • 聯結類型。這些類型是由指定於 ON 子句的聯結條件來限定。

FROM 子句是資料表名稱、檢視名稱及 JOIN 子句的逗號分隔清單。

Transact-SQL 的延伸模組支援 FROM 子句中資料表或檢視以外的物件規格。這些其他的物件傳回結果集,或是 OLE DB 中所謂的資料列集形成虛擬資料表。SELECT 陳述式再將結果集視為資料表來運作。

FROM 子句可以指定:

  • 一或多個資料表或檢視。例如:

    SELECT *
    FROM SalesOrderHeader
    
  • 二或多個資料表或檢視之間的聯結:

    SELECT Cst.CustomerID, St.Name, Ord.ShipDate, Ord.Freight 
    FROM AdventureWorks.Sales.Store AS St
    JOIN AdventureWorks.Sales.Customer AS Cst
    ON St.CustomerID = Cst.CustomerID
    JOIN AdventureWorks.Sales.SalesOrderHeader AS Ord
    ON Cst.CustomerID = Ord.CustomerID
    
  • 一個或多個衍生資料表,此為 FROM 子句中的別名或使用者指定名稱所參考的 SELECT 陳述式。位於 FROM 子句中的SELECT 其結果集形成外部 SELECT 陳述式所使用的資料表。例如,下列 SELECT 使用衍生資料表傳回每位員工所居住的城市:

    USE AdventureWorks ;
    GO
    SELECT RTRIM(c.FirstName) + ' ' + LTRIM(c.LastName) AS Name,
     d.City
    FROM Person.Contact c
    INNER JOIN HumanResources.Employee e ON c.ContactID = e.ContactID 
    INNER JOIN (SELECT AddressID, City FROM Person.Address) AS d
    ON e.AddressID = d.AddressID
    ORDER BY c.LastName, c.FirstName ;
    
  • 除了聯結之外,APPLY 運算子也可用於 FROM 子句以評估右手邊的輸入,這通常是資料表值函數,與左手邊輸入資料表的每個資料列相反,並可合併所有這些評估的結果。如需詳細資訊,請參閱<使用 APPLY>。

  • PIVOT 與 UNPIVOT 運算子可用於 FROM 子句,以重新形成輸入資料表。PIVOT 運算子可確保輸出中的新資料行是以資料行的輸入值為基礎。如需詳細資訊,請參閱<使用 PIVOT 和 UNPIVOT>。

  • 來自連結的伺服器 (使用 sp_addlinkedserver 來定義) 的一或多個資料表或檢視。連結的伺服器可以是任何 OLE DB 資料來源。

  • OPENROWSET 或 OPENQUERY 函數所傳回的 OLE DB 資料列集。

Microsoft SQL Server 2005 分散式查詢的基礎是連結的伺服器、OPENROWSET 與 OPENQUERY。這些基礎提供了可查詢或修改任何 OLE DB 資料來源的資料,並視為 Transact-SQL 陳述式的一部份。

不含 FROM 子句的 SELECT 陳述式

不需要 FROM 子句的 SELECT 陳述式為不從任何的資料庫資料表中選取資料的陳述式。這些 SELECT 陳述式只從本機變數或不在資料行上運作的 Transact-SQL 函數中選取資料,例如:

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

請參閱

概念

分散式查詢
使用聯結

其他資源

OPENQUERY (Transact-SQL)
FROM (Transact-SQL)
OPENROWSET (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助