Cláusula FROM (SQL Server Compact)

Especifica las tablas de las que se debe recuperar filas. En SQL Server Compact, la cláusula FROM es opcional.

Nota

SQL Server Compact no admite funciones con valores de tabla.

Sintaxis

  [ FROM { < table_source > } [ ,...n ]  
< table_source > ::= 
      table_name [ [ AS ] table_alias ] 
   | < joined_table > 
| <derived_table> [ [ AS ] table_alias ]
< joined_table > ::= 
   < table_source > < join_type > < table_source > ON < search_condition > 
| <table_source> CROSS JOIN <table_source>
| <left_table_source> { CROSS | OUTER } APPLY <right_table_source>
   | ( < joined_table > )
< join_type > ::= 
   [ INNER | { { LEFT | RIGHT } [ OUTER ] } ] JOIN ]
left_table_source::= table_source
right_table_source::=table_source

Argumentos

  • < table_source >
    Especifica las tablas y las tablas combinadas para la instrucción SELECT.

  • table_name [ [ AS ] table_alias]
    Especifica el nombre de una tabla y un alias opcional.

    Cuando se usa una tabla derivada, un conjunto de filas o una función con valores de tabla, el table_alias requerido al final de la cláusula es el nombre de tabla alternativo para todas las columnas que se devuelven, incluidas las columnas de agrupación.

  • < joined_table >
    Conjunto de resultados que es la combinación de dos tablas o más.

    Para varias combinaciones, se puede usar paréntesis para especificar el orden de las combinaciones.

  • derived_table
    Subconsulta que recupera las filas de la base de datos. Se utiliza derived_table como entrada de la consulta externa.

  • < join_type >
    Especifica el tipo de operación de combinación.

  • left_table_source { CROSS | OUTER } APPLY right_table_source
    Especifica que right_table_source del operador APPLY se evalúa respecto a cada fila de left_table_source. Esta funcionalidad es útil cuando right_table_source depende de valores de left_table_source y no existe una forma sencilla de representar la consulta mediante una operación de combinación.

    Debe especificarse CROSS u OUTER con APPLY. Si se especifica CROSS y right_table_source se evalúa respecto a una fila especificada de left_table_source, no se generan filas y se devuelve un conjunto de resultados vacío.

    Si se especifica OUTER, se genera una fila para cada fila de left_table_source, incluso si right_table_source se evalúa respecto a esa fila y devuelve un conjunto de resultados vacío.

  • left_table_source
    Origen de tabla, tal como se ha definido en el argumento anterior. Para obtener más información, vea la sección Notas al final de este documento.

  • right_table_source
    Origen de tabla, tal como se ha definido en el argumento anterior. Para obtener más información, vea la sección Notas al final de este documento.

  • CROSS JOIN
    Especifica el producto cruzado de dos tablas.

  • INNER
    Especifica que se devuelvan todos los pares coincidentes de filas. Rechaza las filas sin coincidencia de las dos tablas. Es el valor predeterminado si no se especifica un tipo de combinación.

  • LEFT [ OUTER ]
    Especifica que todas las filas de la tabla de la izquierda que no cumplan la condición especificada se incluyan en el conjunto de resultados, además de todas las filas devueltas por la combinación interna. Las columnas de salida de la tabla de la izquierda se establecen en NULL.

  • RIGHT [ OUTER ]
    Especifica que todas las filas de la tabla de la derecha que no cumplan la condición especificada se incluyan en el conjunto de resultados, además de todas las filas devueltas por la combinación interna. Las columnas de resultado de la tabla de la derecha se establecen en NULL.

  • JOIN
    Indica que se deben combinar las tablas especificadas.

  • ON < search_condition >
    Especifica la condición en que se basa la combinación. La condición puede especificar cualquier predicado válido, si bien se usan a menudo las columnas y los operadores de comparación.

Comentarios

Cuando se puede escribir la misma consulta mediante un JOIN o un APPLY, use JOIN porque puede ser más rápido.

Si hay alguna referencia de tabla en right_table_source que no está enlazada a ninguna de las tablas que aparecen en right_table_source, debería (i) coincidir con los nombres de tabla o los alias de tabla que muestra left_table_source, o bien (ii) hacer coincidir con un nombre o alias de tabla mostrado por una cláusula FROM externa (si APPLY aparece en una subconsulta en la cláusula WHERE o en la lista SELECT). Si hay referencias coincidentes en i y en ii, i tendrá prioridad.

Los operadores APPLY tienen la misma prioridad que los operadores JOIN. En ausencia de paréntesis, una secuencia de operadores JOIN y APPLY se evalúa de izquierda a derecha.

Para obtener más información, vea los temas de los Libros en pantalla de SQL ServerUsar la cláusula y Usar APPLY..

Ejemplos

Los siguientes ejemplos proporcionan más información sobre cómo se utiliza la cláusula FROM.

SELECT [Order ID], [Unit Price]
FROM [Order Details]

Usar una cláusula FROM simple

En el siguiente ejemplo se recuperan las columnas Employee ID y Last Name de la tabla Employees de la base de datos de ejemplo Northwind.

SELECT [Employee Id], [Last Name]
FROM Employees
ORDER BY [Employee Id]

Usar una combinación cruzada (CROSS JOIN)

El ejemplo siguiente devuelve el producto cruzado de las dos tablas, Employees y Orders. Se devuelve una lista de todas las combinaciones posibles de las filas Employee ID y Order ID.

SELECT E.[Employee ID], O.[Order Id]
FROM Employees E
CROSS JOIN Orders O
ORDER BY E.[Employee ID], O.[Order Id];

Usar una combinación externa izquierda (LEFT OUTER JOIN)

En el ejemplo siguiente se combinan dos tablas en Product ID y se conservan las filas no coincidentes de la tabla izquierda. La tabla Products se hace coincidir con la tabla Order Details en las columnas Product ID de cada tabla. Todos los productos, pedidos y no pedidos, aparecen en el conjunto de resultados.

SELECT p.[Product Name], od.[Order ID]
FROM Products p
LEFT OUTER JOIN [Order Details] od
ON p.[Product ID] = od.[Product ID]
ORDER BY p.[Product Name];

Éste es el conjunto de resultados:

        Product Name            Order ID
        --------------------------------
        Alice Mutton               10000
        Alice Mutton               10045
        Alice Mutton               10093
        Alice Mutton               10124
        Alice Mutton               10166
(2820 rows affected)

Usar una combinación interna (INNER JOIN)

El ejemplo de código siguiente devuelve todos los nombres de productos e identificadores de pedidos de ventas.

-- By default, SQL Server Compact performs an INNER JOIN if only  
-- the JOIN keyword is specified.
SELECT p.[Product Name], od.[Order ID]
FROM Products p
INNER JOIN [Order Details] od
ON p.[Product ID] = od.[Product ID]
ORDER BY p.[Product Name];

Usar una combinación externa derecha (RIGHT OUTER JOIN)

En el ejemplo siguiente se combinan dos tablas en Product ID y se conservan las filas no coincidentes de la tabla derecha. La tabla Products se hace coincidir con la tabla Order Details en las columnas Product ID de cada tabla. Todos los productos, pedidos y no pedidos, aparecen en el conjunto de resultados.

SELECT p.[Product Name], od.[Order ID]
FROM Products p
RIGHT OUTER JOIN [Order Details] od
ON p.[Product ID] = od.[Product ID]
ORDER BY p.[Product Name];

Usar una tabla derivada

En el ejemplo siguiente se usa una tabla derivada, una instrucción SELECT después de la cláusula FROM, para devolver el nombre y los apellidos de todos los empleados y los nombres de contacto y las ciudades de los clientes con los que tratan.

SELECT RTRIM(e.[First Name]) + ' ' + LTRIM(e.[Last Name]) AS [Employee Name], C.[Contact Name], C.City
FROM Employees e
INNER JOIN Orders O 
ON O.[Employee ID] = e.[Employee ID]
INNER JOIN (SELECT [Contact Name], City, [Customer Id] 
FROM Customers) AS C
ON O.[Customer Id] = C.[Customer Id]
ORDER BY e.[Last Name], e.[First Name];

Usar APPLY

CROSS APPLY especifica los datos de origen como el valor de un resultado de tabla en lugar de un nombre de tabla. CROSS APPLY se puede utilizar en instancias donde un subconjunto de datos se genera sobre la marcha para cada fila de la consulta externa. CROSS APPLY permite al usuario especificar la manera en que un subconjunto se construye según las filas de la consulta externa. El siguiente es un ejemplo de una consulta que realiza una operación para cada fila utilizando CROSS APPLY.

EJEMPLO:

SELECT
FROM
  Orders AS O CROSS APPLY
  (
    SELECT TOP(2) * --for each row in Orders there will be at most 2 customers
    FROM Customers C
    WHERE C.[Customer ID] = O.[Customer ID]
    ORDER BY C.[Customer ID]
  ) AS theOrdersTopCustomers

OUTER APPLY especifica los datos de origen como el valor de un resultado de tabla en lugar de un nombre de tabla. OUTER APPLY se puede usar cuando se genera un subconjunto de datos sobre la marcha para cada fila de la consulta externa. A diferencia de CROSS APPLY, OUTER APPLY también retiene las filas de la consulta externa que no tienen ninguna coincidencia con la consulta interna. En el ejemplo siguiente se muestra una consulta que también incluye los resultados sin una coincidencia.

EJEMPLO:

SELECT
FROM
  Customers AS C OUTER APPLY
  (
    SELECT TOP(1) *
    FROM Orders O
    WHERE O.[Customer ID] = C.[Customer ID]
    ORDER BY O.[Customer ID]
  ) AS topCustomerID

El ejemplo anterior muestra que el resultado de OUTER APPLY incluye el identificador de cliente 'PARIS' porque la tabla Orders no contiene ningún registro para 'PARIS'. Por consiguiente, la consulta interna devolvió NULL como identificador de cliente TOP que coincide con 'PARIS' en la tabla Orders. Al cambiar OUTER por CROSS se excluye 'PARIS' del resultado.

Nota

En SQL Server Compact, APPLY no admite funciones definidas por el usuario.