다음을 통해 공유


하위 쿼리

적용 대상:Microsoft Fabric의 Microsoft FabricWarehouse에 있는 Azure Synapse AnalyticsAnalytics Platform System(PDW) SQL 분석 엔드포인트

이 항목에서는 Azure Synapse Analytics, PDW(Analytics Platform System) 또는 Microsoft Fabric에서 하위 쿼리를 사용하는 예제를 제공합니다.

SELECT 문의 경우 SELECT(Transact-SQL)를 참조하세요.

콘텐츠

기본 사항

하위 쿼리가
하위 쿼리는 SELECT, INSERT, UPDATE 또는 DELETE 문 내부 또는 다른 하위 쿼리 내에 중첩된 쿼리입니다. 또한 내부 쿼리 또는 내부 선택이 호출됩니다.

외부 쿼리
하위 쿼리를 포함하는 문입니다. 이를 외부 선택이라고도합니다.

상호 관련된 하위 쿼리
외부 쿼리의 테이블을 참조하는 하위 쿼리입니다.

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

이 섹션에서는 Azure Synapse Analytics 또는 PDW(Analytics Platform System)에서 지원되는 하위 쿼리의 예를 제공합니다.

A. 하위 쿼리에서 TOP 및 ORDER BY

SELECT * FROM tblA  
WHERE col1 IN  
    (SELECT TOP 100 col1 FROM tblB ORDER BY col1);

B. 상관 관계가 지정된 하위 쿼리가 있는 HAVING 절

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. 분석과 상호 관련된 하위 쿼리

SELECT * FROM ReplA AS A   
WHERE A.ID IN   
    (SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);  

D. 하위 쿼리의 상호 관련된 공용 구조체 문

SELECT * FROM RA   
WHERE EXISTS   
    (SELECT 1 FROM RB WHERE RB.b1 = RA.a1   
     UNION ALL SELECT 1 FROM RC);  

E. 하위 쿼리의 조인 조건자

SELECT * FROM RA INNER JOIN RB   
    ON RA.a1 = (SELECT COUNT(*) FROM RC);  

F. 하위 쿼리의 상관 관계 조인 조건자

SELECT * FROM RA   
    WHERE RA.a2 IN   
    (SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);  

G. 데이터 원본으로 상호 연결된 하위 선택

SELECT * FROM RA   
    WHERE 3 = (SELECT COUNT(*)   
        FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);  

H. 집계를 사용한 데이터 값의 상호 관련된 하위 쿼리

SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;  

9\. 상관 관계가 있는 하위 쿼리와 함께 IN 사용

다음 예제에서는 상관 관계 또는 반복 하위 쿼리에서 사용합니다 IN . 이것은 외부 쿼리에 따라 해당 값이 달라지는 쿼리입니다. 내부 쿼리는 외부 쿼리에서 선택할 수 있는 각 행에 대해 한 번 반복적으로 실행됩니다. 이 FactResellerSales 테이블에서 OrderQuantity5이고 DimEmployeeFactResellerSales 테이블에서 직원 ID 번호가 일치하는 각 직원의 EmployeeKey와 이름 및 성의 인스턴스 하나를 검색합니다.

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 및 IN 사용

다음 예제에서는 키워드(keyword) 사용 EXISTS 과 키워드(keyword) 간의 차이를 보여 주는 의미상 동일한 쿼리를 IN 보여 줍니다. 모두 제품 하위 범주가 Road Bikes인 각 제품 이름의 인스턴스 하나를 검색하는 하위 쿼리의 예입니다. ProductSubcategoryKey 는 테이블과 테이블 간의 일치 항목 DimProduct 입니다 DimProductSubcategory .

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;  

또는

SELECT DISTINCT EnglishProductName  
FROM DimProduct AS dp   
WHERE dp.ProductSubcategoryKey IN  
    (SELECT ProductSubcategoryKey  
     FROM DimProductSubcategory   
     WHERE EnglishProductSubcategoryName = 'Road Bikes')  
ORDER BY EnglishProductName;  

11. 여러 상호 관련된 하위 쿼리 사용

다음 예에서는 두 개의 상관 하위 쿼리를 사용하여 특정 제품을 판매한 직원의 이름을 찾습니다.

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;