Subqueries

A következőkre vonatkozik:Azure Synapse AnalyticsSQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft Fabricben

Ez a téma példákat ad az allekérdezések használatára az Azure Synapse Analytics vagy a Microsoft Fabric Warehouse programokban.

A SELECT utasításhoz lásd SELECT (Transact-SQL)

Tartalom

Basics

Allekérdezés
Az allekérdezés olyan lekérdezés, amely egy SELECT, INSERT, UPDATE, vagy DELETE utasítás beágyazódik, vagy egy másik allekérdezés belsejébe. Ezt nevezik belső lekérdezésnek vagy belső kiválasztásnak.

Külső lekérdezés
Az utasítás, amely tartalmazza az allekérdezést. Ezt külső kiválasztásnak is nevezik.

Korrelált allekérdezés
Egy allekérdezés, amely a külső lekérdezésben lévő táblára utal.

Példák: Azure Synapse Analytics

Ez a rész példákat kínál az Azure Synapse Analytics által támogatott allekérdezésekre.

A. TOP és ORDER BY egy al-lekérdezésben

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

B. HAVING klaudzust egy korrelált allekérdezéssel

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. Kapcsolódó allekérdezések analitikával

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

D. Kapcsolódó uniós nyilatkozatok egy al-lekérdezésben

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

E. Csatolj predikátumokat egy allekérdezésben

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

F. Korrelált egyesülés predikátumok egy allekérdezésben

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

G. Korrelált alkiválasztók adatforrásként

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

H. Összevont allekérdezések az aggregátumokkal használt adatértékekben

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

I. IN használata egy korrelált allekérdezéssel

A következő példa egy korrelált vagy ismétlődő allekérdezésben használ IN . Ez egy olyan lekérdezés, amely a külső lekérdezéstől függ az értékek szempontjából. A belső lekérdezést ismételten futtatják, minden sorhoz egyszer, amelyet a külső lekérdezés választhat. Ez a lekérdezés minden alkalmazott plusz kereszt- és vezetéknevének egy példányát EmployeeKey kapja meg, amelyhez a táblázatban OrderQuantity szereplő FactResellerSales5 személy és amelynek azonosító számai megegyeznek az DimEmployee és FactResellerSales táblákban.

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. EXISTS és IN használata allekérdezéssel

A következő példa szemantikailag ekvivalens lekérdezéseket mutat be, hogy szemléltessen, milyen különbség van a EXISTS kulcsszó és a IN kulcsszó használata között. Mindkettő példája egy allekérdezésnek, amely minden termék nevének egy példányát kéri, amelyhez a termék alkategóriája .Road Bikes ProductSubcategoryKey és asztalok közötti egyezések DimProductDimProductSubcategory .

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;  

Vagy

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

K. Több korrelált allekérdezés használata

Ez a példa két összefüggő allekérdezést használ azoknak a munkavállalóknak a neveire, akik egy adott terméket eladtak.

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;