Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:Azure Synapse Analytics Analytics
Platform System (PDW)
SQL-slutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
Det här avsnittet innehåller exempel på hur du använder underfrågor i Azure Synapse Analytics, Analytics Platform System (PDW) eller Microsoft Fabric.
För SELECT-instruktionen, se SELECT (Transact-SQL)
Innehåll
Grundläggande inställningar
Underfråga
En underfråga är en fråga som är kapslad i en SELECT-, INSERT-, UPDATE- eller DELETE-instruktion eller inuti en annan underfråga. Detta kallas även för en inre fråga eller inre markering.
Yttre fråga
-instruktionen som innehåller underfrågan. Detta kallas även för en yttre markering.
Korrelerad underfråga
En underfråga som refererar till en tabell i den yttre frågan.
Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)
Det här avsnittet innehåller exempel på underfrågor som stöds i Azure Synapse Analytics eller Analytics Platform System (PDW).
A. TOP och ORDER BY i en underfråga
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. HAVING-sats med en korrelerad underfråga
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. Korrelerade underfrågor med analys
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Korrelerade union-instruktioner i en underfråga
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Koppla predikat i en underfråga
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Korrelerade kopplingspredikat i en underfråga
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Korrelerade underval som datakällor
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Korrelerade underfrågor i de datavärden som används med aggregeringar
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. Använda IN med en korrelerad underfråga
I följande exempel används IN i en korrelerad eller upprepande underfråga. Det här är en fråga som är beroende av den yttre frågan för dess värden. Den inre frågan körs upprepade gånger, en gång för varje rad som kan väljas av den yttre frågan. Den här frågan hämtar en instans av EmployeeKey plus för- och efternamn för varje anställd som OrderQuantity i FactResellerSales tabellen är 5 och för vilken medarbetaridentifieringsnumren matchar i tabellerna DimEmployee och 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. Använda EXISTS jämfört med IN med en underfråga
I följande exempel visas frågor som är semantiskt likvärdiga för att illustrera skillnaden mellan att använda nyckelordet EXISTS och nyckelordet IN . Båda är exempel på en underfråga som hämtar en instans av varje produktnamn som produktunderkategorin är Road Bikesför .
ProductSubcategoryKey matchar mellan tabellerna DimProduct och 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;
Eller
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE dp.ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey
FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
K. Använda flera korrelerade underfrågor
I det här exemplet används två korrelerade underfrågor för att hitta namnen på anställda som har sålt en viss 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;