SELECT (Transact-SQL)
Recupera filas de la base de datos y habilita la selección de una o varias filas o columnas de una o varias tablas en SQL Server 2008 R2. La sintaxis completa de la instrucción SELECT es compleja, aunque las cláusulas principales se pueden resumir del modo siguiente:
[ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Los operadores UNION, EXCEPT e INTERSECT se pueden utilizar entre consultas para combinar o comparar resultados en un conjunto de resultados.
Sintaxis
<SELECT statement> ::=
[WITH <common_table_expression> [,...n]]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[ ,...n ] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ]
[ BY expression [ ,...n ] ]
]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP (expression) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING < search_condition > ]
Comentarios
Debido a la complejidad de la instrucción SELECT, se muestran elementos y argumentos detallados de la sintaxis de cada cláusula:
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 solo si las listas de selección de estas instrucciones contienen expresiones que asignan valores a variables locales de las funciones.
Un nombre de cuatro partes creado con la función OPENDATASOURCE como la parte de nombre de servidor se puede utilizar como un origen de tabla donde pueda aparecer un nombre de tabla en una instrucción SELECT.
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.
Orden de procesamiento lógico de la instrucción SELECT
Los pasos siguientes muestran el orden de procesamiento lógico, u orden de enlace, para una instrucción SELECT. Este orden determina el momento en que los objetos definidos en un paso están disponibles para las cláusulas de los pasos subsiguientes. Por ejemplo, si el procesador de consultas se puede enlazar (obtener acceso) a las tablas o vistas definidas en la cláusula FROM, estos objetos y sus columnas quedan disponibles para todos los pasos subsiguientes. A la inversa, dado que la cláusula SELECT es el paso 8, las cláusulas precedentes no pueden hacer referencia a los alias de columna o las columnas derivadas definidos en esa cláusula. Sin embargo, las cláusulas subsiguientes, como la cláusula ORDER BY, sí pueden hacer referencia a ellos. Observe que la ejecución física real de la instrucción está determinada por el procesador de consultas y el orden de esta lista puede variar.
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE o WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Permisos
La selección de datos requiere el permiso SELECT en la tabla o en la vista, que se puede heredar de un ámbito superior como el permiso SELECT permiso en el esquema o el permiso CONTROL en la tabla. O bien, se requiere pertenecer a los roles fijos de base de datos db_datareader o db_owner, o al rol fijo de servidor sysadmin. La creación de una nueva tabla mediante SELECTINTO también requiere tanto el permiso CREATETABLE como el permiso ALTERSCHEMA en el esquema al que pertenece la nueva tabla.