Alt Sorgular
Şunlar için geçerlidir:Azure Synapse AnalyticsPlatform Sistemi (PDW)Microsoft Fabric'teki Microsoft Fabric Ambarı'nda SQL Uç Noktası
Bu konu başlığı altında, Azure Synapse Analytics, Analytics Platform Sistemi (PDW) veya Microsoft Fabric'te alt sorgu kullanma örnekleri verilmiştir.
SELECT deyimi için bkz . SELECT (Transact-SQL)
İçindekiler
Temel Bilgiler
Alt sorgu
Alt sorgu, SELECT, INSERT, UPDATE veya DELETE deyiminin içinde veya başka bir alt sorgu içinde bulunan bir sorgudur. Buna iç sorgu veya iç seçim de denir.
Dış sorgu
Alt sorguyu içeren deyim. Buna dış seçim de denir.
Bağıntılı alt sorgu
Dış sorgudaki bir tabloya başvuran bir alt sorgu.
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
Bu bölümde, Azure Synapse Analytics veya Analytics Platform Sistemi'nde (PDW) desteklenen alt sorgu örnekleri sağlanır.
A. Alt sorguda TOP ve ORDER BY
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. İlişkili alt sorguya sahip HAVING yan tümcesi
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. Analizle bağıntılı 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 sorgudaki bağıntılı birleşim deyimleri
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Bir alt sorguda birleştirme koşulu
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Bir alt sorguda bağıntılı birleştirme koşullarını
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 bağıntılı alt seçim
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Toplamalarla kullanılan veri değerlerinde bağıntılı alt sorgular
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. IN'i bağıntılı alt sorguyla kullanma
Aşağıdaki örnek bağıntılı veya yinelenen bir alt sorguda kullanır IN
. Bu, değerleri için dış sorguya bağımlı olan bir sorgudur. İç sorgu, dış sorgu tarafından seçilebilen her satır için bir kez olmak üzere art arda çalıştırılır. Bu sorgu, tabloda yer alan EmployeeKey
ve ve tablolarında FactResellerSales
5
çalışan kimlik numaralarının eşleşmesi için her çalışanın OrderQuantity
artı adı ve FactResellerSales
soyadının bir örneğini DimEmployee
alır.
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. Bir alt sorgu ile EXISTS ve IN kullanma
Aşağıdaki örnekte, anahtar sözcük ile anahtar sözcük kullanımı EXISTS
arasındaki farkı göstermek için ifadeyle eşdeğer olan sorgular gösterilmektedir IN
. Her ikisi de, ürün alt kategorisinin olduğu her ürün adının bir örneğini alan bir alt sorgu örneğidir Road Bikes
. ProductSubcategoryKey
ve DimProductSubcategory
tabloları arasında DimProduct
eşleşir.
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;
Kahraman. Birden çok bağıntılı alt sorgu kullanma
Bu örnekte, belirli bir ürünü satan çalışanların adlarını bulmak için iki bağıntılı alt sorgu kullanılı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;