문제
다음 상관 서브쿼리를 비상관 서브쿼리로 변환한 것으로 가장 적절한 것은?
SQLSELECT * FROM 사원 A WHERE 급여 > (SELECT AVG(급여) FROM 사원 B WHERE A.부서코드 = B.부서코드);
① SELECT * FROM 사원 WHERE 급여 > (SELECT AVG(급여) FROM 사원) ② SELECT A.* FROM 사원 A, (SELECT 부서코드, AVG(급여) AS 평균급여 FROM 사원 GROUP BY 부서코드) B WHERE A.부서코드 = B.부서코드 AND A.급여 > B.평균급여 ③ SELECT * FROM 사원 WHERE EXISTS (SELECT 1 FROM 사원 WHERE 급여 > AVG(급여)) ④ SELECT * FROM 사원 A WHERE 급여 IN (SELECT AVG(급여) FROM 사원 GROUP BY 부서코드)
정답
2번
해설
② 부서별 평균급여를 미리 계산한 인라인뷰와 조인하여 비상관 서브쿼리로 변환. ① 전체 평균과 비교하므로 의미가 다름. ③ EXISTS 구문이 잘못되고 의미도 다름. ④ IN 사용으로 정확한 비교 불가능.