Compartir a través de


Componentes de una instrucción SELECT

La sintaxis completa de la instrucción SELECT es compleja, aunque las cláusulas principales se pueden resumir del modo siguiente:

SELECT select_list

[ INTO new_table_name ]

FROM table_list

[ WHERE search_conditions ]

[ GROUP BY group_by_list ]

[ HAVING search_conditions ]

[ ORDER BY order_list [ ASC | DESC ] ]

select_list

Describe las columnas del conjunto de resultados. Es una lista de expresiones separadas por comas. Cada expresión define tanto el formato (tipo de datos y tamaño) como el origen de los datos para la columna del conjunto de resultados. Cada expresión de lista de selección suele ser una referencia a una columna de la tabla o vista de origen de la que provienen los datos, aunque puede ser cualquier otra expresión, como una constante o una función Transact-SQL. Al usar la expresión * en una lista de selección, se especifica que se devolverán todas las columnas de la tabla de origen.

INTO new_table_name

Especifica que el conjunto de resultados se usa para crear una tabla nueva. new_table_name especifica el nombre de la nueva tabla.

FROM table_list

Contiene una lista de las tablas cuyos datos del conjunto de resultados se recuperan. Estos orígenes pueden ser:

  • Tablas base en el servidor local que ejecuta SQL Server 2005.
  • Vistas en la instancia local de SQL Server. SQL Server resuelve internamente la referencia de una vista a las referencias en las tablas base que componen la vista.
  • Tablas vinculadas. Estas tablas se encuentran en orígenes de datos OLE DB a los que puede tener acceso SQL Server. Este elemento se denomina consulta distribuida. Desde SQL Server se puede tener acceso a los orígenes de datos OLE DB si se vinculan como un servidor vinculado o se hace referencia al origen de datos en una función OPENROWSET u OPENQUERY.

La cláusula FROM también puede contener especificaciones de combinación. Estas especificaciones definen la ruta de acceso específica que va a utilizar SQL Server para desplazarse entre las tablas.

La cláusula FROM se usa también en las instrucciones DELETE y UPDATE para definir las tablas que se modifican.

WHERE search_conditions

La cláusula WHERE es un filtro que define las condiciones que debe cumplir cada fila de las tablas de origen para satisfacer los requisitos de la instrucción SELECT. Sólo las filas que cumplen las condiciones contribuyen con datos al conjunto de resultados. Los datos de las filas que no cumplen las condiciones no se usan.

La cláusula WHERE se usa también en las instrucciones DELETE y UPDATE para definir las filas de las tablas de destino que deben modificarse.

GROUP BY group_by_list

La cláusula GROUP BY divide en grupos el conjunto de resultados según los valores de las columnas de group_by_list. Por ejemplo, la tabla AdventureWorksSales.SalesOrderHeader incluye diez valores en TerritoryID. Una cláusula GROUP BY TerritoryID divide el conjunto de resultados en 10 grupos, uno por cada valor de TerritoryID.

HAVING search_conditions

La cláusula HAVING es un filtro condicional que se aplica al conjunto de resultados. Lógicamente, la cláusula HAVING filtra las filas del conjunto intermedio de resultados que se genera como consecuencia de la aplicación de alguna cláusula FROM, WHERE o GROUP BY en la instrucción SELECT. Las cláusulas HAVING se usan normalmente con una cláusula GROUP BY, aunque no se necesita una cláusula GROUP BY antes de una cláusula HAVING.

ORDER BY order_list[ ASC | DESC ]

La cláusula ORDER BY define el orden de las filas del conjunto de resultados. order_list especifica las columnas del conjunto de resultados que forman la lista de clasificación. Las palabras clave ASC y DESC se utilizan para especificar si las filas se ordenan en una secuencia ascendente o descendente.

La cláusula ORDER BY es importante porque la teoría relacional especifica que no se puede suponer que las filas de un conjunto de resultados tengan secuencias, a menos que se especifique ORDER BY. ORDER BY debe usarse en cualquier instrucción SELECT para la que sea importante el orden de las filas del conjunto de resultados.

Las cláusulas de una instrucción SELECT deben especificarse en el orden correcto.

Cada referencia a un objeto de base de datos debe ser inequívoco. La ambigüedad puede estar provocada por los siguientes elementos:

  • Es posible que haya varios objetos con el mismo nombre en un sistema. Por ejemplo, Schema1 y Schema2 pueden contener una tabla denominada TableX. Para resolver la ambigüedad y especificar la tabla TableX que pertenece a Schema1, califique el nombre de la tabla, como mínimo, con el nombre de esquema:

    SELECT *
    FROM Schema1.TableX
    
  • La base de datos en la que reside el objeto puede que no sea siempre la base de datos actual cuando se ejecute la instrucción SELECT. Para asegurar que se usa siempre el objeto correcto, independientemente de la configuración de la base de datos actual, califique el nombre del objeto con la base de datos y el esquema:

    SELECT *
    FROM AdventureWorks.Purchasing.ShipMethod
    
  • Las tablas y vistas especificadas en la cláusula FROM pueden tener nombres duplicados de columna. Con frecuencia, las claves externas tienen el mismo nombre de columna que su clave principal relacionada. Para resolver la ambigüedad entre los nombres duplicados, el nombre de la columna debe calificarse con el nombre de la tabla o de la vista:

    SELECT DISTINCT Sales.Customer.CustomerID, Sales.Store.Name
    FROM Sales.Customer JOIN Sales.Store ON
           ( Sales.Customer.CustomerID = Sales.Store.CustomerID)
    WHERE Sales.Customer.TerritoryID = 1
    

    Esta sintaxis se vuelve muy complicada cuando los propios nombres de la tabla y de la vista deben ser completos. Este problema se puede resolver si se asigna un nombre de correlación, conocido también como variable de intervalo o alias, a la tabla mediante la incorporación de la palabra clave AS en la cláusula FROM. El nombre completo de la tabla o vista sólo tiene que especificarse en la cláusula FROM. Todas las demás referencias a la tabla o vista pueden usar el nombre de correlación. Al aplicarse nombres de correlación y calificar completamente las tablas del ejemplo anterior se obtiene como resultado la siguiente instrucción SELECT:

    SELECT DISTINCT c.CustomerID, s.Name
    FROM Sales.Customer AS c
       JOIN
         Sales.Store AS s
       ON ( c.CustomerID = s.CustomerID)
    WHERE c.TerritoryID = 1
    

Para obtener más información acerca de la calificación de objetos, vea Identificadores.

En los Libros en pantalla de SQL Server, muchos ejemplos de Transact-SQL no utilizan nombres completos, para simplificarlos. Aunque estos elementos se excluyen de los ejemplos para facilitar su lectura, recomendamos utilizar nombres completos en las instrucciones Transact-SQL de sistemas de producción.

Vea también

Otros recursos

Expresiones (Transact-SQL)
SELECT (Transact-SQL)
IDENTITY (propiedad de Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005