적용 대상: Azure Synapse Analytics
Analytics Platform System(PDW)
Microsoft Fabric의 SQL 분석 엔드포인트
Microsoft Fabric의 Warehouse
이 항목에서는 Azure Synapse Analytics, PDW(Analytics Platform System) 또는 Microsoft Fabric Warehouse에서 하위 쿼리를 사용하는 예제를 제공합니다.
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 테이블에서 OrderQuantity가 5이고 DimEmployee 및 FactResellerSales 테이블에서 직원 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 사용
다음 예제에서는 키워드와 키워드 사용의 차이점을 보여 주는 의미상 동일한 쿼리를 EXISTS 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;