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;