Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Se aplica a: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punto de conexión de análisis SQL en Microsoft Fabric
Warehouse en Microsoft Fabric
Base de datos SQL de Microsoft Fabric
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 la Motor de base de datos de SQL Server. La sintaxis completa de la instrucción es compleja, pero las cláusulas principales se pueden resumir de la SELECT
siguiente manera:
[ WITH { [ XMLNAMESPACES , ] [ common_table_expression ] } ]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ ORDER BY order_expression [ ASC | DESC ]]
Los operadores UNION, EXCEPT e INTERSECT se pueden usar entre consultas para combinar o comparar sus resultados en un conjunto de resultados.
Convenciones de sintaxis de Transact-SQL
Sintaxis de SQL Server y Azure SQL Database:
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES , ] [ <common_table_expression> [ , ...n ] ] } ]
<query_expression>
[ ORDER BY <order_by_expression> ]
[ <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> ]
[ ; ]
Sintaxis para Azure Synapse Analytics, Almacenamiento de datos en paralelo y Microsoft Fabric:
[ 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 SELECT
instrucción , se muestran los elementos de sintaxis detallados y los argumentos por cláusula:
El orden de las cláusulas de la SELECT
instrucción es significativo. Se puede omitir cualquiera de las cláusulas opcionales pero, cuando se utilizan, deben aparecer en el orden apropiado.
SELECT
Las instrucciones se permiten en funciones definidas por el usuario solo si las listas de selección de estas instrucciones contienen expresiones que asignan valores a variables locales a las funciones.
Un nombre de cuatro partes construido con la OPENDATASOURCE
función como elemento de nombre de servidor se puede usar como origen de tabla siempre que un nombre de tabla pueda aparecer en una SELECT
instrucción . No se puede especificar un nombre de cuatro partes para Azure SQL Database.
Algunas restricciones de sintaxis se aplican a SELECT
las instrucciones que implican tablas remotas.
Los pasos siguientes muestran el orden de procesamiento lógico o el orden de enlace para una SELECT
instrucción . 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 (acceso) a las tablas o vistas definidas en la FROM
cláusula , estos objetos y sus columnas están disponibles para todos los pasos posteriores. Por el contrario, dado que la cláusula es el SELECT
paso 8, no se puede hacer referencia a ningún alias de columna o columnas derivadas definidas en esa cláusula mediante cláusulas anteriores. Sin embargo, las cláusulas posteriores pueden hacer referencia a ellas, como la ORDER BY
cláusula . El procesador de consultas determina la ejecución física real de la instrucción y el orden puede variar de esta lista.
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE
o WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Advertencia
Hay casos poco comunes en los que la secuencia anterior podría diferir. Supongamos que tiene un índice agrupado en una vista y la vista excluye algunas filas de tabla y la lista de columnas de SELECT
la vista usa un CONVERT
que cambia un tipo de datos de varchar a int. En esta situación, CONVERT
puede ejecutarse antes de que se ejecute la WHERE
cláusula . A menudo hay una manera de modificar la vista para evitar la secuencia diferente, si es importante en su caso.
La selección de datos requiere SELECT
permiso en la tabla o vista, que se podría heredar de un ámbito superior, como SELECT
el permiso en el esquema o CONTROL
el permiso de la tabla. Debe 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 tabla con SELECT INTO
también requiere el CREATE TABLE
permiso y el ALTER SCHEMA
permiso en el esquema que posee la nueva tabla.
En los siguientes ejemplos se usa la base de datos AdventureWorksPDW2022.
En esta sección se muestran tres códigos de ejemplo. En este primer ejemplo de código se devuelven todas las filas (no se especifica ninguna WHERE
cláusula) y todas las columnas (mediante ) *
de la DimEmployee
tabla.
SELECT *
FROM DimEmployee
ORDER BY LastName;
El siguiente ejemplo usa alias de tabla para lograr el mismo resultado.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
En este ejemplo se devuelven todas las filas (no se especifica ninguna WHERE
cláusula) y un subconjunto de las columnas (FirstName
, LastName
, StartDate
) de la DimEmployee
tabla de la base de datos AdventureWorksPDW2022 . El nombre del tercer encabezado de columna cambia a FirstDay
.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
En este ejemplo solo se devuelven las filas de DimEmployee
que tienen un EndDate
valor que no NULL
es y de MaritalStatus
M
(casado).
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
El siguiente ejemplo devuelve todas las filas de la tabla DimEmployee
y calcula el sueldo bruto de cada empleado partiendo de su BaseRate
y de una semana laboral de 40 horas.
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
En el siguiente ejemplo se usa DISTINCT
para generar una lista de todos los puestos únicos de la tabla DimEmployee
.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
En el ejemplo siguiente se busca la cantidad total de todas las ventas de cada día.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Debido a la cláusula GROUP BY
, solo se devuelve una fila que contiene la suma de todas las ventas de cada día.
En el siguiente ejemplo se busca el precio medio y la suma de ventas por Internet de cada día, agrupados por fecha de pedido y por clave de promoción.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
En el siguiente ejemplo, los resultados se colocan en grupos después de recuperar únicamente las filas con fechas de pedido posteriores al 1 de agosto de 2002.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
En este ejemplo se agrupa por una expresión. Puede agrupar por una expresión si ésta no incluye funciones de agregado.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
En el siguiente ejemplo se busca la suma de las ventas por día y los pedidos por día.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
En esta consulta se usa la cláusula HAVING
para acotar los resultados.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoy