Comando Select

SELECT

Obtiene filas de la base de datos y permite realizar la selección de una o varias filas o columnas de una o varias tablas. 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 ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Se puede utilizar el operador UNION entre consultas para combinar sus resultados en un solo conjunto de resultados.
Sintaxis
SELECT statement ::=
< query_expression >
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[,...n] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ]
[ BY expression [ ,...n ] ]
]
[ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ]
}
]
[ OPTION ( < query_hint > [ ,...n ]) ]
< query expression > ::=
{ < query specification > | ( < query expression > ) }
[ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ]
< query specification > ::=
SELECT [ ALL | DISTINCT ]
[ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { < table_source > } [ ,...n ] ]
[ WHERE < search_condition > ]
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
]
[ HAVING < search_condition > ]
Debido a la complejidad de la instrucción SELECT, se muestran elementos y argumentos detallados de la sintaxis de cada cláusula:
Cláusula SELECT
Cláusula INTO
Cláusula FROM
Cláusula WHERE
Cláusula GROUP BY
Cláusula HAVING
Operador UNION
Cláusula ORDER BY
Cláusula COMPUTE
Cláusula FOR
Cláusula OPTION

Cláusula INTO
Crea una nueva tabla e inserta en ella las filas resultantes de la consulta.
El usuario que ejecuta una instrucción SELECT con la cláusula INTO debe tener permiso CREATE TABLE en la base de datos de destino. No se puede utilizar SELECT...INTO con la cláusula COMPUTE. Para obtener más información, consulte Transacciones y Transacciones explícitas.
Puede utilizar SELECT INTO para crear una definición de tabla idéntica (con diferente nombre de tabla) sin datos mediante la definición de una condición FALSE en la cláusula WHERE.
Sintaxis
[ INTO new_table ]
Argumentos
new_table
Especifica el nombre de una nueva tabla que se va a crear, basada en las columnas de la lista de selección y en las filas seleccionadas por la cláusula WHERE. El formato de new_table se determina mediante la evaluación de las expresiones de la lista de selección. Las columnas de new_table se crean en el orden que especifica la lista de selección. Cada columna de new_table tiene el mismo nombre, tipo de datos y valor que la expresión correspondiente de la lista de selección.
Cuando se incluye una columna calculada en la lista de selección, la columna correspondiente de la nueva tabla no es una columna calculada. Los valores de la nueva columna son los que se calcularon en el momento en que se ejecutó SELECT...INTO.
En esta versión de SQL Server, la opción de base de datos select into/bulkcopy no tiene ningún efecto para que pueda crear una tabla permanente con SELECT INTO. La cantidad de registro para algunas operaciones masivas, incluida SELECT INTO, depende del modelo de recuperación activado para la base de datos. Para obtener más información, consulte Utilizar modelos de recuperación.
En versiones anteriores, la creación de una tabla permanente con SELECT INTO estaba permitida sólo si estaba configurado select into/bulkcopy.
select into/bulkcopy está disponible sólo por compatibilidad con versiones anteriores, pero puede no aceptarse en futuras versiones. Para obtener más información, consulte los temas Modelos de recuperación, Compatibilidad con versiones anteriores y ALTER DATABASE.
Referencia de Transact-SQL

Cláusula FROM
Especifica las tablas de las que se van a obtener filas. La cláusula FROM es necesaria excepto cuando la lista de selección sólo contiene constantes, variables y expresiones aritméticas (no nombres de columna). Para obtener más información, consulte FROM.
Sintaxis
[ FROM { < table_source > } [ ,...n ] ]

< table_source > ::=
table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
| view_name [ [ AS ] table_alias ]
| rowset_function [ [ AS ] table_alias ]
| OPENXML
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| < joined_table >
< joined_table > ::=
< table_source > < join_type > < table_source > ON < search_condition >
| < table_source > CROSS JOIN < table_source >
| < joined_table >
< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } ]
[ < join_hint > ]
JOIN
Argumentos
< table_source >
Especifica las tablas, vistas, tablas derivadas y tablas combinadas para la instrucción SELECT.
table_name [ [ AS ] table_alias ]
Especifica el nombre de una tabla y un alias opcional.
view_name [ [ AS ] table_alias ]
Especifica el nombre de una vista y un alias opcional.
rowset_function [ [ AS ] table_alias ]
Se trata del nombre de una función de conjunto de filas y un alias opcional. Para obtener más información acerca de una lista de funciones de conjunto de filas, consulte Funciones de conjunto de filas.
OPENXML
Proporciona una vista de un conjunto de filas en un documento XML. Para obtener más información, consulte OPENXML
WITH ( < table_hint > [ ,...n ] )
Especifica una o varias sugerencias para la tabla. Para obtener más información acerca de las sugerencias de tabla, consulte FROM.
derived_table [ [ AS ] table_alias ]
Se trata de una instrucción SELECT anidada que recupera filas de la base de datos y de las tablas especificadas.
column_alias
Es un alias opcional para sustituir el nombre de una columna en el conjunto de resultados.
< joined_table >
Es un conjunto de resultados producto de dos o más tablas. Por ejemplo:
SELECT *
FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
ON tab3.c1 = tab4.c1
ON tab2.c3 = tab4.c3
Para varias combinaciones CROSS, utilice paréntesis para cambiar el orden natural de las combinaciones.
< join_type >
Especifica el tipo de operación de combinación.
INNER
Especifica que se devuelvan todos los pares de filas coincidentes. Descarta las filas no coincidentes de las dos tablas. Éste es el valor predeterminado si no se especifica ningún 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 que devuelva la combinación interna. Las columnas de salida de la tabla de la izquierda se establecen a 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 las que devuelva la combinación interna. Las columnas de salida de la tabla de la derecha se establecen a NULL.
FULL [ OUTER ]
Si una fila de la tabla de la izquierda o de la derecha no coincide con los criterios de selección, especifica que la fila se incluya en el conjunto de resultados y las columnas de resultados que corresponden a la otra tabla se establezcan como NULL. Se trata de una adición a todas las filas que normalmente devuelve la combinación interna.
< join_hint >
Especifica una sugerencia de combinación o un algoritmo de ejecución. Si se especifica <join_hint>, es necesario especificar también explícitamente INNER, LEFT, RIGHT o FULL. Para obtener más información, consulte FROM.
JOIN
Indica que las tablas o vistas especificadas deben combinarse.
ON < search_condition >
Especifica la condición en la que se basa la combinación. La condición puede especificar cualquier predicado, aunque se suelen utilizar columnas y operadores de comparación. Por ejemplo:
SELECT ProductID, Suppliers.SupplierID
FROM Suppliers JOIN Products
ON (Suppliers.SupplierID = Products.SupplierID)
Si la condición especifica columnas, éstas no disponen del mismo número o tipo de datos. Sin embargo, si los tipos de datos no son idénticos, deberán ser compatibles o tipos que Microsoft® SQL Server™ pueda convertir implícitamente. Si los tipos de datos no se pueden convertir implícitamente, la condición debe convertir explícitamente el tipo de datos mediante la función CAST.
Para obtener más información acerca de las condiciones de búsqueda y los predicados, consulte Condición de búsqueda.
CROSS JOIN
Especifica el producto resultante de dos tablas. Devuelve las filas que se devolverían si las tablas que se combinan se indicaran en la cláusula FROM, sin especificar ninguna cláusula WHERE. Por ejemplo, el resultado que devuelven las dos consultas siguientes es el producto de una combinación cruzada de todas las filas de T1 y T2:
SELECT * FROM T1, T2
SELECT * FROM T1 CROSS JOIN T2
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Referencia de Transact-SQL

Cláusula WHERE
Especifica una condición de búsqueda para restringir las filas que se van a devolver.
Sintaxis
[ WHERE < search_condition > | < old_outer_join > ]
< old_outer_join > ::=
column_name { * = | = * } column_name
Argumentos
<search_condition>
Limita las filas devueltas en el conjunto de resultados mediante el uso de predicados. No hay límite en el número de predicados que se pueden incluir en una condición de búsqueda. Para obtener más información acerca de las condiciones de búsqueda y los predicados, consulte Condición de búsqueda.
< old_outer_join >
Especifica una combinación externa con la sintaxis antigua específica del producto y la cláusula WHERE. Se utiliza el operador *= para especificar una combinación externa izquierda y el operador =* para especificar una combinación externa derecha.
Este ejemplo especifica una combinación externa izquierda en que las filas de Tab1 que no cumplen la condición especificada se incluyen en el conjunto de resultados:
SELECT Tab1.name, Tab2.id
FROM Tab1, Tab2
WHERE Tab1.id *=Tab2.id

Nota No se recomienda utilizar esta sintaxis de combinación externa debido a la posibilidad de que la interpretación sea ambigua y porque se trata de una sintaxis no estándar. En su lugar, especifique las combinaciones en la cláusula FROM.
Se pueden especificar combinaciones externas mediante operadores de combinación en la cláusula FROM o mediante los operadores no estándar *= y =* en la cláusula WHERE. No se pueden utilizar los dos métodos en la misma instrucción.

Cláusula GROUP BY
Especifica los grupos en los que se van colocar las filas de salida y, si se incluyen funciones de agregado en la cláusula SELECT <select list>, calcula el valor de resumen de cada grupo. Cuando se especifica GROUP BY, cada columna que no esté en una expresión de agregado de la lista de selección se debe incluir en la lista de GROUP BY o la expresión GROUP BY debe coincidir exactamente con la expresión de la lista de selección.

Nota Si no se especifica la cláusula ORDER BY, los grupos devueltos con la cláusula GROUP BY no están en un orden particular. Se recomienda que siempre utilice la cláusula ORDER BY para especificar un orden determinado de los datos.
Sintaxis
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
]
Argumentos
ALL
Incluye todos los grupos y conjuntos de resultados, incluso aquellos en los que no hay filas que cumplan la condición de búsqueda especificada en la cláusula WHERE. Cuando se especifica ALL, se devuelven valores NULL para las columnas o grupos de resumen que no cumplen la condición de búsqueda. No puede especificar ALL con los operadores CUBE o ROLLUP.
GROUP BY ALL no se acepta en consultas que tienen acceso a tablas remotas si también hay una cláusula WHERE en la consulta.
group_by_expression
Es la expresión en la que se realiza el agrupamiento; group_by_expression también se conoce como columna de agrupamiento y puede ser una columna o una expresión diferente a una de agregado, que hace referencia a una columna. No se puede utilizar un alias de columna en la lista de selección para especificar una columna de agrupamiento.

Nota Las columnas de los tipos text, ntext e image no se pueden utilizar en group_by_expression.
En las cláusulas GROUP BY que no contengan CUBE o ROLLUP, el número de elementos group_by_expression está limitado por los tamaños de columna de GROUP BY, las columnas de agregado y los valores de agregado implicados en la consulta. Este límite procede del límite de 8.060 bytes de la tabla intermedia de trabajo que se necesita para contener los resultados intermedios de la consulta. Se permite un máximo de 10 expresiones de agrupamiento cuando se especifica CUBE o ROLLUP.
CUBE
Especifica que, además de las filas que normalmente proporciona GROUP BY, deben incluirse filas de resumen en el conjunto de resultados. Se devuelve una fila de resumen GROUP BY por cada posible combinación de grupo y subgrupo del conjunto de resultados. En el resultado se muestra una fila de resumen GROUP BY como NULL, pero se utiliza para indicar todos los valores. Utilice la función GROUPING para determinar si los valores nulos del conjunto de resultados son valores de resumen GROUP BY.
El número de filas de resumen del conjunto de resultado se determina mediante el número de columnas que contiene la cláusula GROUP BY. Cada operando (columna) de la cláusula GROUP BY se enlaza según el agrupamiento NULL y se aplica el agrupamiento al resto de los operandos (columnas). Debido a que CUBE devuelve todas las combinaciones posibles de grupo y subgrupo, el número de filas es el mismo, independientemente del orden en que se especifiquen las columnas de agrupamiento.
ROLLUP
Especifica que, además de las filas que normalmente proporciona GROUP BY, deben incluirse filas de resumen en el conjunto de resultados. Los grupos se resumen en un orden jerárquico, desde el nivel inferior del grupo al superior. La jerarquía del grupo se determina mediante el orden en que se especifican las columnas de agrupamiento. Cambiar el orden de las columnas de agrupamiento puede afectar al número de filas producidas en el conjunto de resultados.

Importante No es posible utilizar agregados diferentes, por ejemplo AVG(DISTINCT column_name), COUNT(DISTINCT column_name) y SUM(DISTINCT column_name) cuando se utiliza CUBE o ROLLUP. Si se utiliza, SQL Server devolverá un mensaje de error y cancelará la consulta.
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Referencia de Transact-SQL
Cláusula WHERE
Especifica una condición de búsqueda para restringir las filas que se van a devolver.
Sintaxis
[ WHERE < search_condition > | < old_outer_join > ]
< old_outer_join > ::=
column_name { * = | = * } column_name
Argumentos
<search_condition>
Limita las filas devueltas en el conjunto de resultados mediante el uso de predicados. No hay límite en el número de predicados que se pueden incluir en una condición de búsqueda. Para obtener más información acerca de las condiciones de búsqueda y los predicados, consulte Condición de búsqueda.
< old_outer_join >
Especifica una combinación externa con la sintaxis antigua específica del producto y la cláusula WHERE. Se utiliza el operador *= para especificar una combinación externa izquierda y el operador =* para especificar una combinación externa derecha.
Este ejemplo especifica una combinación externa izquierda en que las filas de Tab1 que no cumplen la condición especificada se incluyen en el conjunto de resultados:
SELECT Tab1.name, Tab2.id
FROM Tab1, Tab2
WHERE Tab1.id *=Tab2.id

Nota No se recomienda utilizar esta sintaxis de combinación externa debido a la posibilidad de que la interpretación sea ambigua y porque se trata de una sintaxis no estándar. En su lugar, especifique las combinaciones en la cláusula FROM.
Se pueden especificar combinaciones externas mediante operadores de combinación en la cláusula FROM o mediante los operadores no estándar *= y =* en la cláusula WHERE. No se pueden utilizar los dos métodos en la misma instrucción.

Cláusula GROUP BY
Especifica los grupos en los que se van colocar las filas de salida y, si se incluyen funciones de agregado en la cláusula SELECT <select list>, calcula el valor de resumen de cada grupo. Cuando se especifica GROUP BY, cada columna que no esté en una expresión de agregado de la lista de selección se debe incluir en la lista de GROUP BY o la expresión GROUP BY debe coincidir exactamente con la expresión de la lista de selección.

Nota Si no se especifica la cláusula ORDER BY, los grupos devueltos con la cláusula GROUP BY no están en un orden particular. Se recomienda que siempre utilice la cláusula ORDER BY para especificar un orden determinado de los datos.
Sintaxis
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
]
Argumentos
ALL
Incluye todos los grupos y conjuntos de resultados, incluso aquellos en los que no hay filas que cumplan la condición de búsqueda especificada en la cláusula WHERE. Cuando se especifica ALL, se devuelven valores NULL para las columnas o grupos de resumen que no cumplen la condición de búsqueda. No puede especificar ALL con los operadores CUBE o ROLLUP.
GROUP BY ALL no se acepta en consultas que tienen acceso a tablas remotas si también hay una cláusula WHERE en la consulta.
group_by_expression
Es la expresión en la que se realiza el agrupamiento; group_by_expression también se conoce como columna de agrupamiento y puede ser una columna o una expresión diferente a una de agregado, que hace referencia a una columna. No se puede utilizar un alias de columna en la lista de selección para especificar una columna de agrupamiento.

Nota Las columnas de los tipos text, ntext e image no se pueden utilizar en group_by_expression.
En las cláusulas GROUP BY que no contengan CUBE o ROLLUP, el número de elementos group_by_expression está limitado por los tamaños de columna de GROUP BY, las columnas de agregado y los valores de agregado implicados en la consulta. Este límite procede del límite de 8.060 bytes de la tabla intermedia de trabajo que se necesita para contener los resultados intermedios de la consulta. Se permite un máximo de 10 expresiones de agrupamiento cuando se especifica CUBE o ROLLUP.
CUBE
Especifica que, además de las filas que normalmente proporciona GROUP BY, deben incluirse filas de resumen en el conjunto de resultados. Se devuelve una fila de resumen GROUP BY por cada posible combinación de grupo y subgrupo del conjunto de resultados. En el resultado se muestra una fila de resumen GROUP BY como NULL, pero se utiliza para indicar todos los valores. Utilice la función GROUPING para determinar si los valores nulos del conjunto de resultados son valores de resumen GROUP BY.
El número de filas de resumen del conjunto de resultado se determina mediante el número de columnas que contiene la cláusula GROUP BY. Cada operando (columna) de la cláusula GROUP BY se enlaza según el agrupamiento NULL y se aplica el agrupamiento al resto de los operandos (columnas). Debido a que CUBE devuelve todas las combinaciones posibles de grupo y subgrupo, el número de filas es el mismo, independientemente del orden en que se especifiquen las columnas de agrupamiento.
ROLLUP
Especifica que, además de las filas que normalmente proporciona GROUP BY, deben incluirse filas de resumen en el conjunto de resultados. Los grupos se resumen en un orden jerárquico, desde el nivel inferior del grupo al superior. La jerarquía del grupo se determina mediante el orden en que se especifican las columnas de agrupamiento. Cambiar el orden de las columnas de agrupamiento puede afectar al número de filas producidas en el conjunto de resultados.

Importante No es posible utilizar agregados diferentes, por ejemplo AVG(DISTINCT column_name), COUNT(DISTINCT column_name) y SUM(DISTINCT column_name) cuando se utiliza CUBE o ROLLUP. Si se utiliza, SQL Server devolverá un mensaje de error y cancelará la consulta.

Cláusula HAVING
Especifica una condición de búsqueda de un grupo o agregado. Normalmente, HAVING se utiliza con la cláusula GROUP BY. Cuando no se utiliza GROUP BY, HAVING se comporta como la cláusula WHERE.
Sintaxis
[ HAVING < search_condition > ]
Argumentos
<search_condition>
Especifica la condición de búsqueda del grupo o del agregado que se debe cumplir. Cuando se utiliza HAVING con GROUP BY ALL, la cláusula HAVING suplanta a ALL. Para obtener más información, consulte Condición de búsqueda.
No se puede utilizar los tipos de datos text, image y ntext en una cláusula HAVING.

Nota La utilización de la cláusula HAVING en la instrucción SELECT no afecta a la forma en que el operador CUBE agrupa el conjunto de resultados y devuelve filas de agregado de resumen
Operador UNION
Mezcla los resultados de dos o más consultas en un solo conjunto de resultados que contiene todas las filas que pertenecen a las consultas de la unión. Este procedimiento es distinto de la utilización de combinaciones de columnas de dos tablas.
Dos reglas básicas para combinar los conjuntos de resultados de dos consultas con UNION son:
· El número y el orden de las columnas debe ser idéntico en todas las consultas.
· Los tipos de datos deben ser compatibles.
Sintaxis
{ < query specification > | ( < query expression > ) }
UNION [ ALL ]
< query specification | ( < query expression > )
[ UNION [ ALL ] < query specification | ( < query expression > )
[ ...n ] ]
Argumentos
< query_specification > | ( < query_expression > )
Es una especificación o expresión de consulta que devuelve datos que se van a combinar con los datos de otra especificación o expresión de consulta. No es preciso que las definiciones de las columnas que forman parte de una operación UNION sean idénticas, pero deben ser compatibles a través de una conversión implícita.
En la tabla se muestran las reglas para comparar los tipos de datos y las opciones de las columnas i correspondientes

Referencia de Transact-SQL

Cláusula ORDER BY
Especifica el orden del conjunto de resultados. La cláusula ORDER BY no es válida en vistas, funciones en línea, tablas derivadas ni subconsultas, salvo que se especifique también TOP.
Sintaxis
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n] ]
Argumentos
order_by_expression
Especifica la columna según la que se ordenará. Se puede especificar una columna de orden como un nombre o alias de columna (que puede estar calificado con el nombre de una tabla o vista), una expresión o un entero no negativo que representa la posición del nombre, alias o expresión en la lista de selección.
Se puede especificar varias columnas de orden. La secuencia de columnas de orden en la cláusula ORDER BY define la estructura del conjunto ordenado de resultados.
La cláusula ORDER BY puede incluir elementos que no aparecen en la lista de selección. Sin embargo, si se especifica SELECT DISTINCT, o si la instrucción SELECT contiene un operador UNION, las columnas ordenadas deben aparecer en la lista de selección.
Además, cuando la instrucción SELECT contiene un operador UNION, los nombres o los alias de las columnas deben ser los especificados en la primera lista de selección.

Nota Las columnas de tipo ntext, text o image no se pueden utilizar en una cláusula ORDER BY.
ASC
Indica que los valores de la columna especificada se deben ordenar de manera ascendente, desde el valor más bajo al más alto.
DESC
Indica que los valores de la columna especificada se deben ordenar de manera descendente, desde el valor más alto al valor más bajo.
Los valores NULL se tratan como los valores más bajos posibles.
No hay límite para el número de elementos en una cláusula ORDER BY. Sin embargo, existe un límite de 8060 bytes en el tamaño de fila de las tablas de trabajo intermedias, necesarias para las operaciones de ordenación. Este número limita el tamaño total de las columnas especificadas en una cláusula ORDER BY.
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Referencia de Transact-SQL

Cláusula COMPUTE
Genera totales que aparecen como columnas de resumen adicionales al final del conjunto de resultados. Cuando se utiliza con BY, la cláusula COMPUTE genera interrupciones de control y subtotales en el conjunto de resultados. Puede especificar COMPUTE BY y COMPUTE en la misma consulta.
Sintaxis
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP
| VAR | VARP | SUM }
( expression ) } [ ,...n ]
[ BY expression [ ,...n ] ]
]
Argumentos
AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
Especifica la función de agregado que se va a realizar. Con la cláusula COMPUTE se utilizan estas funciones de agregado de filas.
Función de agregado de filas Resultado
AVG Promedio de los valores de la expresión numérica.
COUNT Número de filas seleccionadas.
MAX Valor mayor de la expresión.
MIN Valor menor de la expresión.
STDEV Desviación típica estadística de todos los valores de la expresión.
STDEVP Desviación típica estadística del llenado para todos los valores de la expresión.
SUM Total de los valores de la expresión numérica.
VAR Varianza estadística de todos los valores de la expresión.
VARP Varianza estadística del llenado para todos los valores de la expresión.

No existe ninguna función equivalente a COUNT(*). Para localizar la información de resumen que producen GROUP BY y COUNT(*), utilice una cláusula COMPUTE sin BY.
Estas funciones omiten los valores NULL.
No se permite utilizar la palabra clave DISTINCT en funciones de agregado de filas cuando se especifican con la cláusula COMPUTE.
Cuando agregue o calcule el promedio de datos enteros, SQL Server tratará el resultado como un valor int, aunque el tipo de datos de la columna sea smallint o tinyint. Para obtener más información acerca de los tipos devueltos de datos promedio o agregados, consulte SUM y AVG.

Nota Para reducir la posibilidad de que se produzcan errores de desbordamiento en programas de ODBC y de DB-Library, cree todas las declaraciones de variables de los conjuntos de resultados de los promedios o sumas con el tipo de datos int.
( expression )
Una expresión, por ejemplo, el nombre de una columna en la que se realiza el cálculo. El argumento expression debe aparecer en la lista de selección y se debe especificar exactamente igual que una de las expresiones de la lista de selección. En expression no se puede utilizar un alias de columna especificado en la lista de selección.

Nota No se puede especificar los tipos de datos ntext, text o image en una cláusula COMPUTE o en una cláusula COMPUTE BY.
BY expression
Genera interrupciones de control y subtotales en el conjunto de resultados. expression es una copia exacta de una order_by_expression de la cláusula ORDER BY asociada. Normalmente se trata de un nombre de columna o de un alias de columna. Se pueden especificar varias expresiones. Si se enumeran varias expresiones después de BY, se divide un grupo en subgrupos y se aplica la función de agregado en cada nivel del agrupamiento.
Si utiliza COMPUTE BY, también debe utilizar una cláusula ORDER BY. Las expresiones deben ser idénticas a las enumeradas después de ORDER BY o un subconjunto de las mismas, y deben estar en la misma secuencia. Por ejemplo, si la cláusula ORDER BY es:
ORDER BY a, b, c
La cláusula COMPUTE puede ser cualquiera de las siguientes (o todas):
COMPUTE BY a, b, c
COMPUTE BY a, b
COMPUTE BY a

Nota En una instrucción SELECT que contenga una cláusula COMPUTE, el orden de las columnas de la lista de selección suplanta el orden de las funciones de agregado de la cláusula COMPUTE. Los programadores de ODBC y DB-Library deben ser conscientes de este requisito del orden para colocar los resultados de las funciones de agregado en la ubicación correcta.
No puede utilizar COMPUTE en una instrucción SELECT INTO debido a que las instrucciones que contienen COMPUTE generan tablas y los resultados del resumen no se almacenan en la base de datos. Por lo tanto, los cálculos que produce COMPUTE no aparecen en la nueva tabla creada con la instrucción SELECT INTO.
No puede utilizar la cláusula COMPUTE si la instrucción SELECT forma parte de una instrucción DECLARE CURSOR.
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Referencia de Transact-SQL
Cláusula FOR
La cláusula FOR se utiliza para especificar la opción BROWSE o XML (BROWSE y XML son opciones no relacionadas).
Sintaxis
[ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY BASE64 ]
}
]
Argumentos
BROWSE
Especifica que se permiten las actualizaciones mientras se visualizan los datos en el cursor del modo de exploración de DB-Library. Es posible examinar una tabla en una aplicación si la tabla incluye una columna de marca de hora (definida con el tipo de datos timestamp), la tabla tiene un índice exclusivo y la opción FOR BROWSE está al final de las instrucciones SELECT enviadas a SQL Server. Para obtener más información, consulte Browse Mode.

Nota No es posible utilizar <lock_hint> HOLDLOCK en una instrucción SELECT que contenga la opción FOR BROWSE.
La opción FOR BROWSE no puede aparecer en instrucciones SELECT combinadas mediante el operador UNION.
XML
Especifica que el resultado de una consulta se devolverá como un documento XML. Debe especificarse alguno de estos modos XML: RAW, AUTO, EXPLICIT. Para obtener más información acerca de los datos XML y de SLQ Server, consulte Recuperar documentos XML mediante FOR XML.
RAW
Obtiene el resultado de la consulta y transforma cada fila del conjunto de resultados en un elemento XML con un identificador genérico <row /> como etiqueta del elemento. Para obtener más información, consulte Utilizar el modo RAW.
AUTO
Devuelve los resultados de la consulta en un árbol anidado XML sencillo. Cada tabla de la cláusula FROM, para la que al menos se presenta una columna en la cláusula SELECT, se representa como un elemento XML. A las columnas presentadas en la cláusula SELECT se les asignan los atributos de elemento apropiados. Para obtener más información, consulte Utilizar el modo AUTO.
EXPLICIT
Especifica que la forma del árbol XML resultante está definida explícitamente. Con este modo, es necesario escribir las consultas de una cierta manera, de modo que se pueda especificar explícitamente información adicional acerca de la anidación deseada. Para obtener más información, consulte Utilizar el modo EXPLICIT.
XMLDATA
Devuelve el esquema, pero no agrega el elemento raíz al resultado. Si se especifica XMLDATA, éste se agrega al documento.
ELEMENTS
Especifica que las columnas se devuelven como subelementos. Sin embargo, se les asignan atributos XML.
BINARY BASE64
Especifica que la consulta devuelve los datos binarios en el formato codificado binary base64. En la recuperación de datos binarios que utilizan el modo RAW y EXPLICIT, se debe especificar esta opción. Este es el valor predeterminado en el modo AUTO.
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Referencia de Transact-SQL

Cláusula OPTION
Especifica que en toda la consulta se debe utilizar la sugerencia de consulta especificada. Sólo se puede especificar cada sugerencia de consulta una vez, aunque se permiten varias sugerencias de consulta. Sólo se puede especificar una cláusula OPTION con la instrucción. La sugerencia de consulta afecta a todos los operadores de la instrucción. Si hay un argumento UNION implicado en la consulta principal, sólo la última consulta que implique un operador UNION puede contener la cláusula OPTION. Si una o varias sugerencias de consulta provocan que el optimizador de consultas no genere un plan válido, se produce el error 8622.

Advertencia Como el optimizador de consultas selecciona normalmente el mejor plan de ejecución para las consultas, se recomienda que sólo los administradores de bases de datos experimentados utilicen <join_hint>, <query_hint> y <table_hint> como último recurso.
Sintaxis
[ OPTION ( < query_hint > [ ,...n ) ]
< query_hint > ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| {LOOP | MERGE | HASH } JOIN
| FAST number_rows
| FORCE ORDER
| MAXDOP number
| ROBUST PLAN
| KEEP PLAN
| KEEPFIXED PLAN
| EXPAND VIEWS
}
Argumentos
{ HASH | ORDER } GROUP
Especifica que las agregaciones especificadas en la cláusula GROUP BY, DISTINCT o COMPUTE de la consulta deben utilizar hash o un orden.
{ MERGE | HASH | CONCAT } UNION
Especifica que todas las operaciones UNION se deben realizar mediante la mezcla, hash o concatenación de conjuntos UNION. Si se especifica más de una sugerencia UNION, el optimizador de consultas seleccionará la estrategia menos costosa entre las sugerencias especificadas.
{ LOOP | MERGE | HASH } JOIN
Especifica que todas las operaciones de combinación se realicen mediante combinación hash, combinación de mezcla o de bucle en toda la consulta. Si se especifica más de una sugerencia de combinación, el optimizador seleccionará la estrategia menos costosa de entre las permitidas.
Si, en la misma consulta, se especifica también una sugerencia de combinación para un par de tablas específico, ésta tendrá preferencia en la combinación de esas dos tablas aunque aún se deban cumplir las sugerencias de combinación. Por tanto, la sugerencia de combinación para la pareja de tablas sólo se restringe a la selección de los métodos de combinación permitidos en la sugerencia de la consulta. Consulte Observaciones para obtener más detalles.
FAST number_rows
Especifica que se optimice la consulta para una recuperación rápida de las primeras number_rows (un entero no negativo). Después de que se devuelvan las primeras number_rows, la consulta continúa la ejecución y presenta su conjunto de resultados completo.
FORCE ORDER
Especifica que el orden de combinación indicado por la sintaxis de la consulta se mantiene durante la optimización de la consulta.
MAXDOP number
Suplanta la opción de configuración max degree of parallelism (grado máximo de paralelismo) de sp_configure sólo para la consulta que especifica esta opción. Se pueden aplicar todas las reglas semánticas utilizadas con la opción de configuración max degree of parallelism cuando se utiliza la sugerencia de consulta MAXDOP. Para obtener más información, consulte Opción max degree of parallelism.
ROBUST PLAN
Fuerza al optimizador de consultas para que intente aplicar un plan que funcione para el máximo tamaño de fila posible en detrimento del rendimiento. Cuando se procesa la consulta, es posible que las tablas intermedias y los operadores necesiten guardar y procesar filas más anchas que las filas de entrada. Las filas pueden llegar a ser tan anchas que, en algunos casos, el operador especificado no puede procesar la fila. Si esto sucede, SQL Server genera un error durante la ejecución de la consulta. Mediante la utilización de ROBUST PLAN, puede indicar al optimizador de consultas que no tenga en cuenta los planes de consulta donde pueda ocurrir este problema.
KEEP PLAN
Exige que el optimizador de consultas aumente el umbral estimado para volver a compilar una consulta. El umbral estimado para volver a compilar es el punto en que se vuelve a compilar automáticamente una consulta cuando se ha realizado el número estimado de cambios de columnas indizadas (actualizaciones, eliminaciones o inserciones) en una tabla. Al especificar KEEP PLAN, se asegura de que no se volverá a compilar una consulta con tanta frecuencia cuando se producen varias actualizaciones en una tabla.
KEEPFIXED PLAN
Hace que el optimizador de consultas no vuelva a compilar una consulta a causa de cambios en estadísticas o columnas indizadas (actualización, eliminación o inserción). Especificar KEEPFIXED PLAN asegura que la consulta sólo se volverá a compilar si se cambia el esquema de las tablas subyacentes o se ejecuta sp_recompile contra esas tablas.
EXPAND VIEWS
Especifica que las vistas indizadas se expanden y que el optimizador de consultas no considerará ninguna vista indizada como un sustituto de una parte de la consulta. (Una vista se expande cuando se reemplaza el nombre de la vista por la definición de la vista en el texto de la consulta.) Esta sugerencia de consulta virtualmente no permite el uso directo de vistas indizadas ni índices en vistas indizadas en el plan de consulta.
La vista indizada no se expande sólo si se hace referencia a la vista directamente en la parte SELECT de la consulta y se especifica WITH (NOEXPAND) o WITH (NOEXPAND, INDEX( index_val [ ,...n ] ) ). Para obtener más información acerca de la sugerencia de consulta WITH (NOEXPAND), consulte FROM.
La sugerencia sólo afecta a las vistas en la parte SELECT de las instrucciones, incluidas las instrucciones INSERT, UPDATE y DELETE.
Observaciones
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.
En este alcance, es posible tener acceso a una variable table, como si fuera una tabla normal y, por tanto, se puede utilizar como una tabla de origen en una instrucción SELECT.
Un nombre de cuatro partes generado con la función OPENDATASOURCE como la parte de nombre de servidor, también se puede utilizar como una tabla de origen en todos los lugares donde pueda aparecer un nombre de tabla en instrucciones SELECT.
Se aplican algunas restricciones de sintaxis a las instrucciones SELECT relacionadas con las tablas remotas. Para obtener más información, consulte Datos externos y Transact-SQL.
La longitud devuelta para las columnas text o ntext incluidas en la lista de selección es, de forma predeterminada, la menor entre: el tamaño real de text, la configuración predeterminada de la sesión TEXTSIZE y el límite no modificable de la aplicación. Para cambiar la longitud del texto devuelto de la sesión, utilice la instrucción SET. De forma predeterminada, el límite de la longitud de los datos de texto que devuelve una instrucción SELECT es de 4.000 bytes.
SQL Server genera la excepción 511 y deshace la instrucción que se está ejecutando actualmente si se produce una de las siguientes circunstancias:
· 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.
En SQL Server, 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 cualquiera 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 al estilo antiguo
Las versiones anteriores de SQL Server admitían la definición de combinaciones externas que utilizaban los operadores *= y =* en la cláusula WHERE. SQL Server versión 7.0 admite el estándar SQL-92, que proporciona operadores de combinación en la cláusula FROM. Se recomienda volver a escribir las consultas para que utilicen la sintaxis de SQL-92.
Orden de procesamiento de las cláusulas WHERE, GROUP BY y HAVING
En esta lista se muestra el orden de procesamiento de una instrucción SELECT que contiene la cláusula WHERE, la cláusula GROUP BY y la cláusula HAVING:
1. La cláusula WHERE excluye las filas que no cumplen su condición de búsqueda.
2. La cláusula GROUP BY recopila las filas seleccionadas en un grupo para cada valor exclusivo de la cláusula GROUP BY.
3. Las funciones de agregado especificadas en la lista de selección calculan los valores de resumen de cada grupo.
4. La cláusula HAVING excluye también las filas que no cumplen su condición de búsqueda.
Permisos
Los permisos para utilizar SELECT pertenecen de manera predeterminada a los miembros de la función fija de servidor sysadmin y de las funciones fijas de base de datos db_owner y db_datareader y al 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.
Véase también
CONTAINS
CONTAINSTABLE
CREATE TRIGGER
CREATE VIEW
DELETE
EXECUTE
Expresiones
FREETEXT
FREETEXTTABLE
Consultas de texto en datos de SQL Server
INSERT
Aspectos básicos de las combinaciones
SET TRANSACTION ISOLATION LEVEL
sp_dboption
Aspectos básicos de las subconsultas
table
UNION
UPDATE
Utilizar variables y parámetros
WHERE

©Copyrigth 2003 Todos los Derechos Reservados
Jorge Domingo Jesus Palpa
E-mail: george6080@hotmail.com
A.v kalasasaya 1015 mangomarca
Lima- Peru

REGRESAR