Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Azure Synapse Analytics
Analytics Platform System (PDW)
punkt końcowy analizy SQL w usłudze Microsoft Fabric
Warehouse w usłudze Microsoft Fabric
Ten temat podaje przykłady wykorzystania podzapytań w Azure Synapse Analytics, Analytics Platform System (PDW) lub Microsoft Fabric Warehouse.
W przypadku instrukcji SELECT zobacz SELECT (Transact-SQL)
Zawartość
Basics
Podzapytanie
Podzapytanie to zapytanie zagnieżdżone wewnątrz instrukcji SELECT, INSERT, UPDATE, lub DELETE instrukcji, albo w innym podzapytaniu. Nazywa się to również zapytaniem wewnętrznym lub wyborem wewnętrznym.
Zapytanie zewnętrzne
Stwierdzenie zawierające podzapytanie. Nazywa się to również selekcją zewnętrzną.
Powiązane podzapytanie
Podzapytanie odnoszące się do tabeli w zewnętrznym zapytaniu.
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
Ta sekcja zawiera przykłady podzapytań obsługiwanych w Azure Synapse Analytics lub Analytics Platform System (PDW).
A. TOP i ORDER BY w podzapytaniu
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. klauzula HAVING z skorelowanym podzapytaniem
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. Podzapytania skorelowane z analityką
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Powiązane zdania o unii w podzapytaniu
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Połączenie predykatów w podzapytaniu
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Skonfederowane predykaty łączenia w podzapytaniu
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Skorelowane podselekcje jako źródła danych
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Powiązane podzapytania w wartościach danych używanych z agregatami
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. Używanie IN z powiązanym podzapytaniem
Poniższy przykład wykorzystuje IN w skorelowanym lub powtarzającym się podzapytaniu. Jest to zapytanie zależne od zewnętrznego zapytania o jego wartości. Zapytanie wewnętrzne jest wykonywane wielokrotnie, raz dla każdego wiersza, który może być wybrany przez zewnętrzne zapytanie. To zapytanie pobiera jedno przypadek EmployeeKey imienia plus i nazwiska każdego pracownika, dla którego w tabeli FactResellerSales5 jest to OrderQuantity i dla którego numery identyfikacyjne pracownika zgadzają się w tabelach DimEmployee iFactResellerSales.
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życie EXISTS kontra IN z podzapytaniem
Poniższy przykład pokazuje zapytania o semantycznie równoważnych, aby zilustrować różnicę między użyciem EXISTS słowa kluczowego a słowa IN . Oba są przykładami podzapytania, które pobiera po jednym przypadku każdej nazwy produktu, dla której podkategorią Road Bikesproduktu jest .
ProductSubcategoryKey Mecze między DimProduct stołami i 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. Wykorzystanie wielu skorelowanych podzapytań
Ten przykład wykorzystuje dwa powiązane podzapytania do znalezienia nazwisk pracowników, którzy sprzedali dany 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;