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')