SELECT (cláusula de Transact-SQL)
Especifica las columnas que la consulta debe devolver.
Convenciones de sintaxis de Transact-SQL
Sintaxis
SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ]
<select_list>
<select_list> ::=
{
| { table_name | view_name | table_alias }.*
| {
[ { table_name | view_name | table_alias }. ]
{ column_name | $IDENTITY | $ROWGUID }
| udt_column_name [ { . | :: } { { property_name | field_name }
| method_name ( argument [ ,...n] ) } ]
| expression
[ [ AS ] column_alias ]
}
| column_alias = expression
} [ ,...n ]
Argumentos
- ALL
Especifica que el conjunto de resultados puede incluir filas duplicadas. ALL es el valor predeterminado.
- DISTINCT
Especifica que el conjunto de resultados sólo puede incluir filas únicas. Los valores NULL se consideran iguales desde el punto de vista de la palabra clave DISTINCT.
TOP expression [ PERCENT ] [ WITH TIES ]
Indica que el conjunto de resultados de la consulta sólo devolverá un primer conjunto o porcentaje de filas especificado. expression puede ser un número o un porcentaje de filas.La cláusula TOP se puede utilizar en las instrucciones SELECT, INSERT, UPDATE y DELETE. Las instrucciones INSERT, UPDATE y DELETE requieren paréntesis que delimiten expression en TOP. Por compatibilidad con versiones anteriores, se permite el uso de TOP expression sin paréntesis en las instrucciones SELECT, aunque no se recomienda. Para obtener más información, vea TOP (Transact-SQL).
- < select_list >
Columnas que se seleccionarán para el conjunto de resultados. La lista de selección es una serie de expresiones separadas por comas. El número máximo de expresiones que se puede especificar en la lista de selección es 4.096.
- *
Especifica que se deben devolver todas las columnas de todas las tablas y vistas de la cláusula FROM. Las columnas se devuelven por tabla o vista, tal como se especifique en la cláusula FROM, en el orden en que se encuentran en la tabla o vista.
- table_ name| view_ name| table_ alias.*
Limita el ámbito de * a la tabla o vista especificada.
- column_ name
Es el nombre de una columna que se va a devolver. Para impedir referencias ambiguas, como sucedería si dos tablas de la cláusula FROM tuvieran columnas con nombres duplicados, se debe calificar column_name. Por ejemplo, las tablas SalesOrderHeader y SalesOrderDetail de la base de datos AdventureWorks tienen una columna denominada ModifiedDate. Si se combinan ambas tablas en una consulta, se puede especificar la fecha de modificación de las entradas SalesOrderDetail en la lista de selección como SalesOrderDetail.ModifiedDate.
- expression
Es una constante, una función o una combinación de nombres de columna, constantes y funciones conectados mediante uno o varios operadores o una subconsulta.
$IDENTITY
Devuelve la columna de identidad. Para obtener más información, vea IDENTITY (propiedad de Transact-SQL), ALTER TABLE (Transact-SQL) y CREATE TABLE (Transact-SQL).Si más de una tabla de la cláusula FROM contiene una columna con la propiedad IDENTITY, se debe calificar $IDENTITY con el nombre de tabla específico; por ejemplo, T1.$IDENTITY.
$ROWGUID
Devuelve la columna GUID de fila.Si más de una tabla de la cláusula FROM tiene la propiedad ROWGUIDCOL, se debe calificar $ROWGUID con el nombre de tabla específico; por ejemplo, T1.$ROWGUID.
udt_column_name
Es el nombre de una columna que se va a devolver y que tiene un tipo CLR (Common Language Runtime) definido por el usuario.[!NOTA] SQL Server Management Studio devuelve los valores de los tipos definidos por el usuario en representación binaria. Para devolver los valores de los tipos definidos por el usuario en formato XML o de cadena, use CAST o CONVERT.
- { . | :: }
Especifica un método, una propiedad o un campo de un tipo definido por el usuario CLR. Use . para métodos, propiedades o campos de instancia (no estáticos). Use :: para métodos, propiedades o campos estáticos. Para invocar un método, una propiedad o un campo de un tipo definido por el usuario CLR, debe disponer de permiso EXECUTE en el tipo.
- property_name
Es una propiedad pública de udt_column_name.
- field_name
Es un miembro de datos público de udt_column_name.
method_name
Es un método público de udt_column_name que utiliza uno o varios argumentos. method_name no puede ser un método mutador.En el ejemplo siguiente se seleccionan los valores de la columna
Location
, definida como de tipopoint
, de la tablaCities
, mediante la invocación de un método del tipo denominadoDistance
:CREATE TABLE Cities ( Name varchar(20), State varchar(20), Location point ); GO DECLARE @p point (32, 23), @distance float GO SELECT Location.Distance (@p) FROM Cities;
column_ alias
Es un nombre alternativo que se utiliza para reemplazar el nombre de la columna en el conjunto de resultados de la consulta. Por ejemplo, se puede especificar un alias como Quantity, Quantity to Date o Qty para una columna denominada quantity.Los alias se emplean también para especificar nombres para los resultados de expresiones; por ejemplo:
USE AdventureWorks
;GO
SELECT AVG(UnitPrice) AS 'Average Price'
FROM Sales.SalesOrderDetail;
column_alias se puede utilizar en una cláusula ORDER BY. Sin embargo, no puede utilizarse en una cláusula WHERE, GROUP BY o HAVING. Si la expresión de la consulta forma parte de una instrucción DECLARE CURSOR, en la cláusula FOR UPDATE no se puede utilizar column_alias.
Notas
El orden de las cláusulas en la instrucción SELECT es importante. Se puede omitir cualquiera de las cláusulas opcionales pero, cuando se utilizan, deben aparecer en el orden apropiado.
Las instrucciones SELECT se permiten en las funciones definidas por el usuario sólo si las listas de selección de estas instrucciones contienen expresiones que asignan valores a variables locales de las funciones.
La cláusula OPTION no se admite en las vistas.
Dentro de su ámbito, se puede tener acceso a una variable table como una tabla normal y, por tanto, se puede utilizar como un origen de tabla en una instrucción SELECT.
Un nombre de cuatro partes creado con la función OPENDATASOURCE como la parte de nombre de servidor se puede utilizar como origen de tabla en todos los lugares de las instrucciones SELECT donde pueda aparecer un nombre de tabla.
Existen algunas restricciones sintácticas en las instrucciones SELECT relacionadas con las tablas remotas. Para obtener más información, vea Instrucciones para utilizar consultas distribuidas.
La longitud de los datos devueltos para las columnas text o ntext incluidas en la lista de selección se establece en el valor menor de los siguientes: el tamaño real de la columna text, la configuración predeterminada de TEXTSIZE para la sesión o el límite de la aplicación codificado de forma rígida. Para cambiar la longitud del texto devuelto de la sesión, utilice la instrucción SET. De forma predeterminada, la longitud máxima de los datos de texto que se devuelven con una instrucción SELECT es de 4.000 bytes.
El SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) provoca la excepción 511 y revierte la instrucción que se está ejecutando en ese momento si se produce alguno de estos comportamientos:
- La instrucción SELECT produce una fila de resultados o una fila de la tabla de trabajo intermedia que supera los 8.060 bytes.
- La instrucción DELETE, INSERT o UPDATE intenta realizar una acción en una fila que supera los 8.060 bytes.
Se produce un error si no se proporciona un nombre a una columna creada con una instrucción SELECT INTO o CREATE VIEW.
Seleccionar columnas de identidad
Cuando se selecciona una columna de identidad existente en una nueva tabla, la nueva columna hereda la propiedad IDENTITY, a menos que se cumpla una de las siguientes condiciones:
- La instrucción SELECT contiene una combinación, una cláusula GROUP BY o una función de agregado.
- Se han combinado varias instrucciones SELECT con UNION.
- La columna de identidad aparece más de una vez en la lista de selección.
- La columna de identidad forma parte de una expresión.
Si se cumple alguna de estas condiciones, la columna se crea como NOT NULL en lugar de heredar la propiedad IDENTITY. Todas las reglas y restricciones de las columnas de identidad se aplican a la nueva tabla.
Combinaciones externas de estilo antiguo
Las versiones anteriores de SQL Server admiten la definición de combinaciones externas que utilizan los operadores *= y =* en la cláusula WHERE. SQL Server 7.0 admite el estándar SQL-92. De esta manera, los operadores de combinación se proporcionan en la cláusula FROM. Cuando el nivel de compatibilidad de la base de datos se establece en 90, no se admiten los operadores de combinación externa (*= y =*).
Orden de procesamiento de las cláusulas WHERE, GROUP BY y HAVING
A continuación, se muestra el orden de procesamiento de una instrucción SELECT con una cláusula WHERE, una cláusula GROUP BY y una cláusula HAVING:
- La cláusula FROM devuelve un conjunto de resultados inicial.
- La cláusula WHERE excluye las filas que no cumplen su condición de búsqueda.
- La cláusula GROUP BY recopila las filas seleccionadas en un grupo para cada valor único de la cláusula GROUP BY.
- Las funciones de agregado especificadas en la lista de selección calculan los valores de resumen de cada grupo.
- La cláusula HAVING excluye también las filas que no cumplen su condición de búsqueda.
Permisos
Es necesario pertenecer a la función fija de servidor sysadmin y a las funciones fijas de base de datos db_owner y db_datareader, y ser el propietario de la tabla. Los miembros de las funciones sysadmin, db_owner y db_securityadmin y el propietario de la tabla pueden transferir permisos a otros usuarios.
Si se utiliza la cláusula INTO para crear una tabla permanente, el usuario debe tener el permiso CREATE TABLE en la base de datos de destino.
Vea también
Referencia
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
Expresiones (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
table (Transact-SQL)
UNION (Transact-SQL)
UPDATE (Transact-SQL)
EXCEPT e INTERSECT (Transact-SQL)
WHERE (Transact-SQL)
Otros recursos
Consultas de búsqueda de texto
Aspectos básicos de las combinaciones
Aspectos básicos de las subconsultas
Usar variables y parámetros (motor de base de datos)
Usar identificadores como nombres de objeto