Alt Sorgular

Şunlar için geçerlidir:Azure Synapse AnalyticsAnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehousein 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;