Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:Azure Synapse Analytics
SQL Analytics-végpont a Microsoft Fabricben
Raktá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;