Aracılığıyla paylaş


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 FactResellerSales5 ç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. ProductSubcategoryKeyve 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;