Usar la cláusula FROM

La cláusula FROM es obligatoria en todas las instrucciones SELECT en las que se estén recuperando datos de tablas o vistas. Use la cláusula FROM para lo siguiente:

  • Enumerar las tablas y vistas que contienen las columnas a las que se hace referencia en la lista de selección y en la cláusula WHERE. Los nombres de las tablas y vistas se pueden sustituir por alias mediante la cláusula AS.

  • Tipos de combinación. Se califican mediante condiciones de combinación especificadas en la cláusula ON.

La cláusula FROM es una lista separada por comas de nombres de tablas, nombres de vistas y cláusulas JOIN.

Transact-SQL tiene extensiones que admiten la especificación de objetos que no sean tablas o vistas en la cláusula FROM. Estos otros objetos devuelven un conjunto de resultados, o conjunto de filas en términos de OLE DB, que forman una tabla virtual. La instrucción SELECT funciona entonces como si el conjunto de resultados fuera una tabla.

En la cláusula FROM puede especificar lo siguiente:

  • Una o varias tablas o vistas. Por ejemplo:

    USE AdventureWorks2008R2;
    GO
    SELECT *
    FROM Sales.SalesOrderHeader
    
  • Combinaciones de dos o más tablas o vistas:

    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;
    
  • Una o varias tablas derivadas, que son instrucciones SELECT de la cláusula FROM a las que se hace referencia mediante un alias o un nombre definido por el usuario. El conjunto de resultados de la instrucción SELECT de la cláusula FROM forma una tabla usada por la instrucción SELECT externa. Por ejemplo, la instrucción SELECT siguiente utiliza una tabla derivada para devolver la ciudad en la que vive cada empleado:

    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 ;Además de las combinaciones, el operador APPLY se puede utilizar en la cláusula FROM para evaluar la entrada de la derecha, que suele ser una función con valores de tabla, comparándola con cada fila de la tabla de entrada de la izquierda y combinar los resultados de todas estas evaluaciones. Para obtener más información, vea Usar APPLY.

  • Los operadores PIVOT y UNPIVOT se pueden utilizar en la cláusula FROM para cambiar la forma de la tabla de entrada. El operador PIVOT genera nuevas columnas en la salida basándose en los valores de las columnas de su entrada. Para obtener más información, vea Usar PIVOT y UNPIVOT.

  • Una o varias tablas o vistas de un servidor vinculado definido con sp_addlinkedserver. Un servidor vinculado puede ser cualquier origen de datos OLE DB.

  • Un conjunto de filas OLE DB devuelto por las funciones OPENROWSET u OPENQUERY.

La base de las consultas distribuidas de SQL Server son los servidores vinculados, OPENROWSET y OPENQUERY. Permiten consultar o modificar datos de cualquier origen de datos OLE DB como parte de las instrucciones Transact-SQL.

Instrucciones SELECT sin cláusulas FROM

Las instrucciones SELECT que no necesitan una cláusula FROM son las que no seleccionan datos de ninguna tabla de la base de datos. Estas instrucciones SELECT sólo seleccionan datos de las variables locales o de funciones Transact-SQL que no operan en una columna, por ejemplo:

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