Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Azure Synapse AnalyticsAnalytics
Platform System (PDW)
SQL analytics endpoint in Microsoft FabricWarehouse
in Microsoft Fabric
Bu konu, Azure Synapse Analytics, Analytics Platform System (PDW) veya Microsoft Fabric Warehouse'da alt sorguların kullanılmasına örnekler vermektedir.
SELECT ifadesi için bkz. SELECT (Transact-SQL)
İçeriği
Basics
Alt Sorgu
Alt sorgu, bir SELECT, INSERT, UPDATE, veya DELETE ifadenin içinde ya da başka bir alt sorgu içinde iç içe yerleştirilmiş bir sorgudur. Buna aynı zamanda iç sorgu veya iç seçim denir.
Dış sorgu
Alt sorguyu içeren ifade. Buna dış seçim de denir.
Bağlantılı alt sorgu
Dış sorgudaki bir tabloya atıfta bulunan bir alt sorgu.
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
Bu bölüm, Azure Synapse Analytics veya Analytics Platform System (PDW)'de desteklenen alt sorgulara örnekler sunmaktadır.
A. Alt sorguda TOP ve ORDER BY
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. HAVING cümlesi ile ilişkili bir alt sorgu
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. Analitikle ilişkilendirilen alt sorgular
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Bir alt sorguda ilişkili birlik ifadeleri
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Bir alt sorguda predikatları birleştir
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Bir alt sorguda korelasyonlu birleşik önlemler
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Veri kaynağı olarak ilişkili alt seçimler
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Agregatlarla kullanılan veri değerlerinde ilişkili alt sorgular
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. IN ile ilişkili bir alt sorgu kullanımı
Aşağıdaki örnek, korelasyonlu veya tekrarlayan bir alt sorguda kullanılır IN . Bu, değerleri dış sorguya bağlı olan bir sorgudur. İç sorgu, dış sorgu tarafından seçilebilecek her satır için bir kez tekrarlanır. Bu sorgu, tablodaki her çalışanın plus isim ve soyadının bir örneğini EmployeeKey alır ve OrderQuantity tablolarında çalışan kimlik numaraları eşleşir DimEmployeeFactResellerSales.FactResellerSales5
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 ile IN ile alt sorgu arasında
Aşağıdaki örnek, anahtar kelime ile IN anahtar kelime arasındaki EXISTS farkı göstermek için anlamsal olarak eşdeğer sorgular gösterilir. Her ikisi de ürün alt kategorisi Road Bikesolan her ürün adının bir örneğini alan bir alt sorgu örneğidir.
ProductSubcategoryKey ve masalar DimProductDimProductSubcategory arasındaki eşleşmeler.
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;
Veya
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE dp.ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey
FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
K. Birden fazla korelasyonlu alt sorgu kullanımı
Bu örnek, belirli bir ürünü satan çalışanların isimlerini bulmak için iki ilişkili alt sorgu kullanır.
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;