Subconsultas
Se aplica a:Azure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento de Microsoft Fabric
En este tema se ofrecen ejemplos de uso de subconsultas en Azure Synapse Analytics, Sistema de la plataforma de análisis (PDW) o Microsoft Fabric.
Para la instrucción SELECT, vea SELECT (Transact-SQL)
Contenido
Aspectos básicos
Subconsulta
Una subconsulta es una consulta anidada en una instrucción SELECT, INSERT, UPDATE o DELETE, o bien en otra subconsulta. Eso también se denomina consulta interna o selección interna.
Consulta externa
La instrucción que contiene la subconsulta. Esto también se denomina selección externa.
Subconsulta correlacionada
Una subconsulta que hace referencia a una tabla en la consulta externa.
Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)
En esta sección se proporcionan ejemplos de consultas admitidas en Azure Synapse Analytics o Sistema de la plataforma de análisis (PDW).
A. TOP y ORDER BY en una subconsulta
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. Cláusula HAVING con una subconsulta correlacionada
SELECT dm.EmployeeKey, dm.FirstName, dm.LastName
FROM DimEmployee AS dm
GROUP BY dm.EmployeeKey, dm.FirstName, dm.LastName
HAVING 5000 <=
(SELECT sum(OrderQuantity)
FROM FactResellerSales AS frs
WHERE dm.EmployeeKey = frs.EmployeeKey)
ORDER BY EmployeeKey;
C. Subconsultas correlacionadas con análisis
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Instrucciones de unión correlacionadas en una subconsulta
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Predicados de combinación en una subconsulta
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Predicados de combinación correlacionados en una subconsulta
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Subselecciones correlacionadas como orígenes de datos
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Subconsultas correlacionadas en los valores de datos que se usan con agregados
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. Uso de IN con una subconsulta correlacionada
En el siguiente ejemplo se utiliza IN
en una subconsulta correlativa o repetitiva. Se trata de una consulta que depende de la consulta externa de sus valores. La consulta interna se ejecuta varias veces, una por cada fila que pueda seleccionar la consulta externa. Esta consulta recupera una instancia de la EmployeeKey
junto al nombre y apellido de cada empleado para el que OrderQuantity
en la tabla FactResellerSales
sea 5
y cuyos números de identificación coincidan en las tablas DimEmployee
y FactResellerSales
.
SELECT DISTINCT dm.EmployeeKey, dm.FirstName, dm.LastName
FROM DimEmployee AS dm
WHERE 5 IN
(SELECT OrderQuantity
FROM FactResellerSales AS frs
WHERE dm.EmployeeKey = frs.EmployeeKey)
ORDER BY EmployeeKey;
J. Uso de EXISTS frente a IN con una subconsulta
En el ejemplo siguiente se muestran consultas que son semánticamente equivalentes para demostrar la diferencia entre el uso de la palabra clave EXISTS
y la palabra clave IN
. Ambos son ejemplos de una subconsulta que recupera una instancia de cada nombre de producto cuya subcategoría de producto es Road Bikes
. ProductSubcategoryKey
coincide entre las tablas DimProduct
y DimProductSubcategory
.
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE EXISTS
(SELECT *
FROM DimProductSubcategory AS dps
WHERE dp.ProductSubcategoryKey = dps.ProductSubcategoryKey
AND dps.EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
Or
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE dp.ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey
FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
K. Uso de varias subconsultas correlacionadas
En este ejemplo se utilizan dos subconsultas correlativas para buscar los nombres de los empleados que han vendido un producto específico.
SELECT DISTINCT LastName, FirstName, e.EmployeeKey
FROM DimEmployee e JOIN FactResellerSales s ON e.EmployeeKey = s.EmployeeKey
WHERE ProductKey IN
(SELECT ProductKey FROM DimProduct WHERE ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName LIKE '%Bikes'))
ORDER BY LastName;
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de