Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:Azure Synapse AnalyticsAnalytics
Platform System (PDW)
SQL analytics endpoint in Microsoft FabricWarehouse
in Microsoft Fabric
Toto téma uvádí příklady použití poddotazů v Azure Synapse Analytics, Analytics Platform System (PDW) nebo Microsoft Fabric Warehouse.
Pro příkaz SELECT viz SELECT (Transact-SQL)
Obsah
Basics
Poddotaz
Poddotaz je dotaz, který je vnořen do SELECT, INSERT, UPDATE, nebo DELETE příkazu, případně do jiného poddotazu. Tento proces se také nazývá vnitřní dotaz nebo vnitřní výběr.
Vnější dotaz
Tvrzení, které obsahuje poddotaz. Toto se také nazývá vnější selekt.
Korelacovaný poddotaz
Poddotaz, který odkazuje na tabulku ve vnějším dotazu.
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
Tato sekce poskytuje příklady poddotazů podporovaných v Azure Synapse Analytics nebo Analytics Platform System (PDW).
A. TOP a ORDER BY v poddotazu
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. Klauzule HAVING s korelovaným poddotazem
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. Korelacované poddotazy s analytikou
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Korelované sjednocené výroky v poddotazu
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Spojte predikáty v poddotazu
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Korelované predikáty spojů v poddotazu
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Korelované podvýběry jako zdroje dat
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Korelované poddotazy v datových hodnotách používaných s agregáty
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. Použití IN s korelovaným poddotazem
Následující příklad používá IN v korelovaném, tedy opakujícím se, poddotazu. Jedná se o dotaz, který závisí na vnějším dotazu na jeho hodnoty. Vnitřní dotaz se provádí opakovaně, jednou pro každý řádek, který může být vybrán vnějším dotazem. Tento dotaz získá jeden případ EmployeeKey plus jména a příjmení každého zaměstnance, pro kterého je v tabulce FactResellerSales5 označeno a OrderQuantity pro které se identifikační čísla zaměstnanců shodují v tabulkách DimEmployee a 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. Použití EXISTS versus IN s poddotazem
Následující příklad ukazuje dotazy, které jsou sémanticky ekvivalentní, aby ilustroval rozdíl mezi použitím EXISTS klíčového slova a IN klíčového slova. Oba jsou příklady poddotazu, který získá jednu instanci každého názvu produktu, pro který je produktová podkategorie .Road Bikes
ProductSubcategoryKey Zápasy mezi stoly DimProduct a A 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;
Nebo
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE dp.ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey
FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
K. Použití více korelovaných poddotazů
Tento příklad používá dva korelované poddotazy k nalezení jmen zaměstnanců, kteří prodali konkrétní 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;