
메인 쿼리의 값을 서브쿼리에 전달해서 한 행씩 비교하는 방식임.
SELECT E.deptId, E.name, E.salary
FROM emp AS E
WHERE E.salary = (
SELECT MAX(salary)
FROM emp
WHERE deptId = E.deptId # 바깥쪽 E.deptId를 매번 참조함
);
미리 부서별 최고 연봉 테이블을 만들어두고 한 번에 합치는 방식임.
SELECT E.*
FROM emp AS E
INNER JOIN (
# 먼저 부서별 최고연봉 표를 딱 한 번만 만듦
SELECT deptId, MAX(salary) AS maxSalary
FROM emp
GROUP BY deptId
) AS M
ON E.deptId = M.deptId AND E.salary = M.maxSalary;
| 비교 항목 | 상관 서브쿼리 | 인라인 뷰 + JOIN |
|---|---|---|
| 서브쿼리 실행 | 행 개수만큼 반복 | 딱 1번 |
| 대량 데이터 성능 | 느림 | 압도적 빠름 |
| 코드 가독성 | 직관적이라 이해는 쉬움 | 구조 파악이 필요함 |
👍👍👍굳밥국밥