문제
다음 상관 서브쿼리를 일반 조인으로 올바르게 변환한 것은?
SQLSELECT A.사번, A.이름 FROM 직원 A WHERE EXISTS (SELECT 1 FROM 급여 B WHERE A.사번 = B.사번 AND B.급여액 > 5000000);
① SELECT A.사번, A.이름 FROM 직원 A, 급여 B WHERE A.사번 = B.사번 AND B.급여액 > 5000000 ② SELECT DISTINCT A.사번, A.이름 FROM 직원 A INNER JOIN 급여 B ON A.사번 = B.사번 WHERE B.급여액 > 5000000 ③ SELECT A.사번, A.이름 FROM 직원 A LEFT JOIN 급여 B ON A.사번 = B.사번 WHERE B.급여액 > 5000000 ④ SELECT A.사번, A.이름 FROM 직원 A WHERE A.사번 IN (SELECT B.사번 FROM 급여 B WHERE B.급여액 > 5000000)
정답
2번
해설
EXISTS는 존재 여부만 확인하므로 조인 시 중복 제거를 위해 DISTINCT가 필요합니다. 한 직원이 여러 급여 레코드를 가질 경우 중복 발생 가능성이 있기 때문입니다. ① DISTINCT 없이 중복 발생 가능합니다. ③ LEFT JOIN은 조건을 만족하지 않는 직원도 포함하여 부적절합니다. ④ 여전히 서브쿼리 형태로 조인 변환이 아닙니다.