Использование предложения FROM

Предложение FROM необходимо в любой инструкции SELECT, где данные извлекаются из таблиц или представлений. Используйте предложение FROM, чтобы:

  • перечислить список таблиц и представлений, содержащих столбцы из списка выбора и в предложении WHERE. Именам таблиц и представлений может быть присвоен псевдоним при помощи предложения AS;

  • Использовать соединения. они определяются условиями, указанными в предложении ON;

Предложение FROM является списком имен таблиц, представлений и предложений JOIN с разделителями-запятыми.

Язык Transact-SQL содержит расширения, которые поддерживают указание объектов, отличных от таблиц или представлений, в предложении FROM. Эти другие объекты возвращают результирующий набор или набор строк в терминах OLE DB, который образует виртуальную таблицу. Затем инструкция SELECT работает так, как будто результирующий набор является таблицей.

Предложение FROM может задать:

  • одну или несколько таблиц или представлений. Например:

    USE AdventureWorks2008R2;
    GO
    SELECT *
    FROM Sales.SalesOrderHeader
    
  • соединения двух или более таблиц или представлений:

    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 в виде псевдонимов или пользовательских имен. Результирующий набор SELECT в предложении FROM образует таблицу, используемую внешней инструкцией 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. Помимо соединений оператор APPLY можно использовать в предложении FROM для вычисления правого аргумента, который обычно является возвращающей табличное значение функцией, для каждой строки таблицы, являющейся левым аргументом, и последующего слияния результатов всех этих вычислений. Дополнительные сведения см. в разделе Использование APPLY.

  • операторы PIVOT и UNPIVOT используются для переопределения формы входной таблицы. Оператор PIVOT формирует новые столбцы на выходе на основании значений столбцов на входе. Дополнительные сведения см. в разделе Использование операторов PIVOT и UNPIVOT.

  • одну или несколько таблиц или представлений из связанного сервера, определенного при помощи хранимой процедуры sp_addlinkedserver. Связанный сервер может быть любым источником данных OLE DB.

  • набор строк OLE DB, возвращаемый функциями OPENROWSET или OPENQUERY.

Основой распределенных запросов SQL Server являются связанные серверы, OPENROWSET и OPENQUERY. Они предоставляют возможность запрашивать или изменять данные в любом источнике данных OLE DB как часть инструкций на языке Transact-SQL.

Инструкции SELECT без предложений FROM

Инструкции SELECT, не требующие наличия предложения FROM, не выбирают данные из таблиц базы данных. Эти инструкции SELECT выбирают данные только из локальных переменных или функций языка Transact-SQL, которые не работают со столбцами, например:

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