SELECT (Transact-SQL)

 

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síBase de datos SQL de AzuresíAlmacenamiento de datos SQL de Azure síAlmacenamiento de datos paralelos

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. La sintaxis completa de la instrucción SELECT es compleja, aunque las cláusulas principales se pueden resumir del modo siguiente:

[ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> ] } ]

Seleccione select_list [INTO new_table ]

[Desde table_source ] [donde search_condition ]

[GROUP BY group_by_expression ]

[Tener search_condition ]

[ORDER BY expresiónOrden [ASC | DESC]]

Los operadores UNION, EXCEPT e INTERSECT se pueden utilizar entre consultas para combinar o comparar resultados en un conjunto de resultados.

Topic link icon Convenciones de sintaxis de Transact-SQL

-- Syntax for SQL Server and Azure SQL Database  
  
<SELECT statement> ::=    
    [ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> [,...n] ] } ]  
    <query_expression>   
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }   
  [ ,...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 > ]   

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
[ WITH <common_table_expression> [ ,...n ] ]  
SELECT <select_criteria>  
[;]  
  
<select_criteria> ::=  
    [ TOP ( top_expression ) ]   
    [ ALL | DISTINCT ]   
    { * | column_name | expression } [ ,...n ]   
    [ FROM { table_source } [ ,...n ] ]  
    [ WHERE <search_condition> ]   
    [ GROUP BY <group_by_clause> ]   
    [ HAVING <search_condition> ]   
    [ ORDER BY <order_by_expression> ]  
    [ OPTION ( <query_option> [ ,...n ] ) ]  
  

Debido a la complejidad de la instrucción SELECT, se muestran elementos y argumentos detallados de la sintaxis de cada cláusula:

WITH XMLNAMESPACES

 CON common_table_expression
TENER
SELECT (cláusula)UNIÓN
Cláusula INTOEXCEPT e INTERSECT
DEORDENAR POR
DONDECláusula FOR
AGRUPAR PORCláusula OPTION

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 generado con la función OPENDATASOURCE como la parte del nombre de servidor se puede usar como origen de tabla siempre que sea un nombre de tabla puede aparecer en una instrucción SELECT. No se puede especificar un nombre de cuatro partes para Base de datos SQL de Azure.

Existen algunas restricciones sintácticas en las instrucciones SELECT relacionadas con las tablas remotas.

Los pasos siguientes muestran el orden de procesamiento lógico, u orden de enlaces, de una instrucción SELECT. Este orden determina cuándo los objetos definidos en un paso están disponibles para las cláusulas en pasos posteriores. Por ejemplo, si el procesador de consultas puede enlazar (obtener acceso) a las tablas o las vistas definidas en la cláusula FROM, estos objetos y sus columnas están disponibles para todos los pasos siguientes. Por el contrario, dado que la cláusula SELECT es el paso 8, las cláusulas anteriores no pueden hacer referencia a los alias de columna o columnas derivadas definidas en esa cláusula. Sin embargo, las cláusulas siguientes, tales como la cláusula ORDER BY, sí pueden hacer referencia. Observe que la ejecución física real de la instrucción está determinada por el procesador de consultas y el orden puede variar en esta lista.

  1. FROM

  2. ON

  3. JOIN

  4. WHERE

  5. GROUP BY

  6. WITH CUBE o WITH ROLLUP

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. ARRIBA

La selección de datos necesita el permiso SELECT en la tabla o en la vista, que se puede heredar de un ámbito superior como el permiso SELECT en el esquema o el permiso CONTROL en la tabla. O debe pertenecer a la db_datareader o db_owner funciones fijas de base de datos, o la sysadmin rol fijo de servidor. Crear una nueva tabla mediante SELECTINTO también necesita tanto el CREATETABLE permiso y el ALTERSCHEMA permiso en el esquema al que pertenece la nueva tabla.

A. Usar SELECT para recuperar filas y columnas

En esta sección se muestra tres ejemplos de código. En el primer ejemplo de código, se devuelven todas las filas (no se especifica la cláusula WHERE) y todas las columnas (con *) de la tabla DimEmployee de la base de datos AdventureWorksPDW2012.

-- Uses AdventureWorks  
  
SELECT *  
FROM DimEmployee  
ORDER BY LastName;  

El siguiente ejemplo utilizando el alias de tabla para lograr el mismo resultado.

-- Uses AdventureWorks  
  
SELECT e.*  
FROM DimEmployee AS e  
ORDER BY LastName;  

Este ejemplo devuelve todas las filas (no se especifica ninguna cláusula WHERE) y un subconjunto de las columnas (FirstName, LastName, StartDate) desde el DimEmployee tabla el AdventureWorksPDW2012 base de datos. El tercer encabezado de columna ha cambiado a FirstDay.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, StartDate AS FirstDay  
FROM DimEmployee   
ORDER BY LastName;  

Este ejemplo devuelve solo las filas de DimEmployee que tienen un EndDate que no sea NULL y un MaritalStatus de ' m ' (casado).

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, StartDate AS FirstDay  
FROM DimEmployee   
WHERE EndDate IS NOT NULL   
AND MaritalStatus = 'M'  
ORDER BY LastName;  

B. Usar SELECT con encabezados de columna y cálculos

El ejemplo siguiente devuelve todas las filas de la DimEmployee de tabla y calcula el sueldo bruto de cada empleado en función de sus BaseRate y una semana laboral de 40 horas.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, BaseRate, BaseRate * 40 AS GrossPay  
FROM DimEmployee  
ORDER BY LastName;  

C. Usar DISTINCT con SELECT

En el ejemplo siguiente se utiliza DISTINCT para generar una lista de todos los títulos únicos en el DimEmployee tabla.

-- Uses AdventureWorks  
  
SELECT DISTINCT Title  
FROM DimEmployee  
ORDER BY Title;  

D. Usar GROUP BY

En el ejemplo siguiente se busca la cantidad total de todas las ventas de cada día.

-- Uses AdventureWorks  
  
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
GROUP BY OrderDateKey  
ORDER BY OrderDateKey;  

Causa de la GROUP BY cláusula, se devuelve una única fila que contiene la suma de todas las ventas para cada día.

E. Usar GROUP BY con varios grupos

En el ejemplo siguiente se busca el precio medio y la suma de ventas por Internet para cada día, agrupadas por fecha de pedido y la clave de promoción.

-- Uses AdventureWorks  
  
SELECT OrderDateKey, PromotionKey, AVG(SalesAmount) AS AvgSales, SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
GROUP BY OrderDateKey, PromotionKey  
ORDER BY OrderDateKey;   

F. Usar GROUP BY y WHERE

En el ejemplo siguiente se coloca los resultados en grupos después de recuperar únicamente las filas con las fechas de pedidos a más tardar el 1 de agosto de 2002.

-- Uses AdventureWorks  
  
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
WHERE OrderDateKey > '20020801'  
GROUP BY OrderDateKey  
ORDER BY OrderDateKey;  

G. Usar GROUP BY con una expresión

En este ejemplo se agrupa por una expresión. Puede agrupar por una expresión si ésta no incluye funciones de agregado.

-- Uses AdventureWorks  
  
SELECT SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
GROUP BY (OrderDateKey * 10);  
  

H. Usar GROUP BY con ORDER BY

En el ejemplo siguiente se busca la suma de las ventas por día y los pedidos por día.

-- Uses AdventureWorks  
  
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
GROUP BY OrderDateKey  
ORDER BY OrderDateKey;  
  

I. Usar la cláusula HAVING

Esta consulta utiliza la HAVING cláusula para restringir los resultados.

-- Uses AdventureWorks  
  
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
GROUP BY OrderDateKey  
HAVING OrderDateKey > 20010000  
ORDER BY OrderDateKey;  

Seleccionar ejemplos (Transact-SQL)

Adiciones de comunidad

AGREGAR
Mostrar: