FROM 句の使用

FROM 句は、テーブルまたはビューからデータを取得している SELECT ステートメントごとに必要です。FROM 句は次の場合に使用します。

  • 選択リストや WHERE 句で参照する列を格納しているテーブルおよびビューをリストする場合。テーブル名やビュー名には AS 句を使用して別名を付けることができます。

  • 型を結合する場合。結合条件は ON 句で指定します。

FROM 句は、テーブル名、ビュー名、および JOIN 句をコンマで区切ったリストです。

Transact-SQL には、テーブルまたはビュー以外のオブジェクトを FROM 句で指定できる拡張機能が備わっています。このようなオブジェクトは結果セット (OLE DB でいう行セット) を返し、仮想テーブルを形成します。SELECT ステートメントは、この結果セットをテーブルと同じように扱います。

FROM 句では次のオブジェクトや操作を指定できます。

  • 1 つ以上のテーブルまたはビュー。次に例を示します。

    USE AdventureWorks2008R2;
    GO
    SELECT *
    FROM Sales.SalesOrderHeader
    
  • 2 つ以上のテーブルまたはビューの結合。次に例を示します。

    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;
    
  • FROM 句内の SELECT ステートメントにより、別名またはユーザー指定の名前で参照されている 1 つ以上の派生テーブル。FROM 句内にある SELECT の結果セットは、外部 SELECT ステートメントで使用されるテーブルを形成します。たとえば、次の SELECT は派生テーブルを使用して各従業員が住んでいる市区町村を返します。

    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 ; FROM 句では、結合に加えて APPLY 演算子を指定できます。これにより、右辺の入力 (通常はテーブル値関数) を左辺の入力の各行に対して評価し、すべての評価の結果をマージできます。詳細については、「APPLY の使用」を参照してください。

  • PIVOT 演算子と UNPIVOT 演算子。これらの演算子は、入力テーブルの形状を変更するために FROM 句で使用できます。PIVOT 演算子の出力では、入力の列の値に基づいて、新しい列が生成されます。詳細については、「PIVOT と UNPIVOT の使用」を参照してください。

  • sp_addlinkedserver を使用して定義されているリンク サーバー上の 1 つ以上のテーブルまたはビュー。リンク サーバーには、任意の OLE DB データ ソースを指定できます。

  • OPENROWSET 関数または OPENQUERY 関数のいずれかから返される OLE DB 行セット。

SQL Server 分散クエリの基礎は、リンク サーバー、OPENROWSET、および OPENQUERY です。これらにより、Transact-SQL ステートメントの一部として、任意の OLE DB データ ソースのデータに対するクエリまたは変更を実行することが可能になります。

FROM 句を使用しない SELECT ステートメント

データベース内のテーブルからのデータを選択していない SELECT ステートメントの場合、FROM 句は不要です。このような SELECT ステートメントは、列に対する操作を行わないローカル変数または Transact-SQL 関数からのデータ選択のみを実行します。次に例を示します。

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