실행 핵심 상관 서브쿼리는 현재 행이 바뀔 때마다 다시 실행된다

외부 쿼리의 p.category가 내부 조건으로 들어가고, 계산된 MAX(price)를 현재 행의 price와 비교해 결과 포함 여부를 정합니다.

1

외부 쿼리가 현재 행을 하나 집는다

현재 행 예시 category = '전자'
price = 300000

외부 쿼리는 한 번에 한 행씩 읽고, 그 행의 값이 다음 계산의 기준이 됩니다.

→
2

그 행의 category로 내부 MAX를 다시 계산한다

서브쿼리 조건 SELECT MAX(price)
FROM products p2
WHERE p2.category = p.category
전자500000
도서30000

현재 행의 category가 달라지면 내부 조건도 함께 바뀌고, 같은 카테고리여도 다음 행이면 다시 평가될 수 있습니다.

→
3

현재 행의 price와 비교해 포함 여부를 정한다

500000 = 500000 포함
300000 ≠ 500000 제외

비교가 끝나면 다음 외부 행으로 넘어가 같은 흐름이 다시 반복됩니다.

반복 비용 외부 행 수가 늘수록 서브쿼리 실행 횟수도 함께 늘어난다
1행
2행
3행
... N행

행이 많을수록 같은 계산이 반복될 가능성이 커집니다. 그래서 상관 서브쿼리는 대량 데이터에서 느려지기 쉽고, 다음 단계에서 JOIN이나 윈도우 함수로 바꾸는 이유가 됩니다.