SELECT customer.CustomerId, customer.CustomerName, ord.*
FROM customers customer
CROSS APPLY
(
SELECT SUM(order.quantity) as TotalQuantity
FROM orders order
WHERE order.CustomerId = customer.CustomerId
) ord;
응답
이 SQL 코드의 CROSS APPLY 함수는 서브 쿼리 결과를 customers 테이블의 각 행에 적용하는 상관 서브 쿼리의 역할을 합니다. 분류는 다음과 같습니다.
외부 쿼리: 기본 쿼리는 customer로 별칭이 지정된 customers 테이블에서 CustomerId 및 CustomerName를 선택합니다.
CROSS APPLY: 이 키워드는 상관 하위 쿼리를 발생시킵니다. 이 함수는 데이터베이스에 customers 테이블의 각 행에 대해 서브 쿼리를 실행하도록 지시합니다.
서브 쿼리: 서브 쿼리는 다음과 같은 방법으로 각 고객에 대해 TotalQuantity를 계산합니다.
orders 테이블에서 quantity 합계를 선택합니다(별칭 order으로 지정).
customers 테이블의 현재 행에 있는 CustomerId을 기준으로 orders 테이블을 필터링합니다.
결과:CROSS APPLY는 각 고객에 대해 CustomerId, CustomerName, 계산된 TotalQuantity을 포함하는 단일 행을 반환합니다.
기본적으로 CROSS APPLY를 사용하면 서브 쿼리 결과를 기반으로 각 고객의 새 열(TotalQuantity)을 동적으로 생성하여 customers 테이블을 집계된 주문 데이터와 효과적으로 결합할 수 있습니다.
예시:
다음 데이터가 있다고 가정해 보겠습니다.
고객:
CustomerId
CustomerName
1
John Doe
2
Jane Smith
주문:
OrderId
CustomerId
수량
1
1
5
2
1
3
3
2
2
쿼리는 다음과 같은 결과를 반환합니다.
CustomerId
CustomerName
TotalQuantity
1
John Doe
8
2
Jane Smith
2
참고:
CROSS APPLY는 OUTER APPLY와 비슷하지만 서브 쿼리가 결과를 반환하지 않더라도 OUTER APPLY는 행을 반환합니다.
이 특정 예시에서는 GROUP BY 절과 함께 JOIN을 사용하여 동일한 결과를 얻을 수 있습니다. 하지만 특정 시나리오에서, 특히 복잡한 서브 쿼리를 처리할 때 CROSS APPLY가 더 유연하고 효율적일 수 있습니다.
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["번역 문제","translationIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2024-07-11(UTC)"],[],[]]