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
|