Udostępnij za pomocą


Zapytania podrzędne

Dotyczy:Azure Synapse Analytics AnalyticsPlatform System (PDW)PUNKT końcowy SQL w usłudze Microsoft FabricWarehouse w usłudze Microsoft Fabric

W tym temacie przedstawiono przykłady użycia podquerii w usłudze Azure Synapse Analytics, Analytics Platform System (PDW) lub Microsoft Fabric.

Aby uzyskać instrukcję SELECT, zobacz SELECT (Transact-SQL)

Zawartość

Podstawy

Podzapytanie
Podquery to zapytanie zagnieżdżone wewnątrz instrukcji SELECT, INSERT, UPDATE lub DELETE albo wewnątrz innego podquery. Jest to również nazywane zapytaniem wewnętrznym lub zaznaczeniem wewnętrznym.

Zapytanie zewnętrzne
Instrukcja zawierająca podquery. Jest to również nazywane wybieraniem zewnętrznym.

Skorelowane podquery
Podqueria odwołująca się do tabeli w zapytaniu zewnętrznym.

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

Ta sekcja zawiera przykłady podquerii obsługiwanych w systemie Azure Synapse Analytics lub Analytics Platform System (PDW).

A. TOP i ORDER BY w podquery

SELECT * FROM tblA  
WHERE col1 IN  
    (SELECT TOP 100 col1 FROM tblB ORDER BY col1);

B. Klauzula HAVING z skorelowanym podquerią

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. Skorelowane podquery z analizą

SELECT * FROM ReplA AS A   
WHERE A.ID IN   
    (SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);  

D. Skorelowane instrukcje unii w podquery

SELECT * FROM RA   
WHERE EXISTS   
    (SELECT 1 FROM RB WHERE RB.b1 = RA.a1   
     UNION ALL SELECT 1 FROM RC);  

E. Dołączanie predykatów w podquery

SELECT * FROM RA INNER JOIN RB   
    ON RA.a1 = (SELECT COUNT(*) FROM RC);  

F. Skorelowane predykaty sprzężenia w podquery

SELECT * FROM RA   
    WHERE RA.a2 IN   
    (SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);  

G. Skorelowane podwybierze jako źródła danych

SELECT * FROM RA   
    WHERE 3 = (SELECT COUNT(*)   
        FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);  

H. Skorelowane podquery w wartościach danych używanych z agregacjami

SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;  

I. Używanie funkcji IN z skorelowanym podquerią

W poniższym przykładzie użyto IN skorelowanego lub powtarzającego się podquery. Jest to zapytanie, które zależy od zewnętrznego zapytania dla jego wartości. Zapytanie wewnętrzne jest uruchamiane wielokrotnie, jeden raz dla każdego wiersza, który może zostać wybrany przez zapytanie zewnętrzne. To zapytanie pobiera jedno wystąpienie EmployeeKey znaku plus i nazwisko każdego pracownika, dla którego OrderQuantity znajduje się tabela 5FactResellerSales i dla którego numery identyfikacyjne pracowników są zgodne z tabelami DimEmployee i 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. Używanie metody EXISTS a IN z podquery

W poniższym przykładzie przedstawiono zapytania, które są semantycznie równoważne, aby zilustrować różnicę między użyciem EXISTS słowa kluczowego IN a słowem kluczowym. Oba są przykładami podquery, która pobiera jedno wystąpienie każdej nazwy produktu, dla którego podkategoria produktu to Road Bikes. ProductSubcategoryKey dopasowanie między tabelami DimProduct i 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;  

Lub

SELECT DISTINCT EnglishProductName  
FROM DimProduct AS dp   
WHERE dp.ProductSubcategoryKey IN  
    (SELECT ProductSubcategoryKey  
     FROM DimProductSubcategory   
     WHERE EnglishProductSubcategoryName = 'Road Bikes')  
ORDER BY EnglishProductName;  

K. Używanie wielu skorelowanych podquerii

W tym przykładzie użyto dwóch skorelowanych podquerii, aby znaleźć nazwy pracowników, którzy sprzedali określony produkt.

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;