Megosztás a következőn keresztül:


Segédlekérdezések

A következőkre vonatkozik:Azure Synapse Analytics Analyticsplatformrendszer (PDW)SQL-végpont a Microsoft FabricWarehouse-ban a Microsoft Fabricben

Ez a témakör a Azure Synapse Analyticsben, az Elemzési platformrendszerben (PDW) vagy a Microsoft Fabricben használt albekérdezésekre mutat be példákat.

A SELECT utasításért lásd: SELECT (Transact-SQL)

Tartalom

Alapvető beállítások

Segédlekérdezés
Az albekérdezés egy SELECT, INSERT, UPDATE vagy DELETE utasításba vagy egy másik alkikérdezésbe ágyazott lekérdezés. Ezt belső lekérdezésnek vagy belső kijelölésnek is nevezik.

Külső lekérdezés
Az alkikérdezéseket tartalmazó utasítás. Ezt külső kijelölésnek is nevezik.

Korrelált subquery
A külső lekérdezés egy táblájára hivatkozó al lekérdezés.

Példák: Azure Synapse Elemzési és elemzési platformrendszer (PDW)

Ez a szakasz a Azure Synapse Analytics- vagy Elemzési platformrendszerben (PDW) támogatott albekérdezésekre mutat be példákat.

A. TOP és ORDER BY egy alkérdezésben

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

B. HAVING záradék egy korrelált alkonyattal

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. Korrelált albekérdezések elemzésekkel

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

D. Egy részkikérdezés korrelált egyesítő nyilatkozatai

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

E. Predikátumok összekapcsolása egy alkonyatban

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

F. Korrelált illesztés predikátumok egy al leké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 alkijelölések adatforrásként

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

H. Az aggregátumokkal használt adatértékek korrelált alkérdezései

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

I. IN használata korrelált alkonyatokkal

Az alábbi példa egy korrelált vagy ismétlődő alkérdezésben használ IN . Ez egy olyan lekérdezés, amely az értékei külső lekérdezésétől függ. A belső lekérdezést a rendszer többször futtatja, minden egyes sorhoz, amelyet a külső lekérdezés kijelölhet. Ez a lekérdezés lekéri minden EmployeeKey alkalmazott plusz vezeték- és utónevének egy példányát, amelynek a OrderQuantity táblában a FactResellerSales neve szerepel5, és amelynek az alkalmazotti azonosítószámai megegyeznek a és FactResellerSales a DimEmployee 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. A EXISTS és az IN használata egy al lekérdezéssel

Az alábbi példa szemantikailag egyenértékű lekérdezéseket mutat be a kulcsszó és a EXISTS kulcsszó használata közötti különbség szemléltetéséhez IN . Mindkettő példa egy al lekérdezésre, amely minden olyan terméknév egy példányát kéri le, amelynek a termék alkategóriája .Road Bikes ProductSubcategoryKeyegyezések a és DimProductSubcategory a DimProduct táblák között.

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 albekérdezés használata

Ez a példa két korrelált alkérdezés használatával keresi meg azoknak az alkalmazottaknak a nevét, akik egy adott terméket értékesítettek.

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;