문제
다음 테이블에서 A부서 직원 중 B부서에는 없는 직원명을 구하는 가장 적절한 SQL은?
[EMP] 직원명, 부서코드 홍길동, A / 김철수, A / 이영희, B / 박민수, A / 최영수, B / 김철수, B
① SELECT 직원명 FROM EMP WHERE 부서코드='A' AND 직원명 NOT IN (SELECT 직원명 FROM EMP WHERE 부서코드='B') ② SELECT 직원명 FROM EMP WHERE 부서코드='A' MINUS SELECT 직원명 FROM EMP WHERE 부서코드='B' ③ SELECT 직원명 FROM EMP WHERE 부서코드='A' INTERSECT SELECT 직원명 FROM EMP WHERE 부서코드='B' ④ SELECT 직원명 FROM EMP WHERE 부서코드='A' UNION SELECT 직원명 FROM EMP WHERE 부서코드='B'
정답
2번
해설
② MINUS 연산자를 사용하여 A부서 직원에서 B부서 직원을 뺀 차집합을 구하는 것이 가장 적절합니다. 결과는 '홍길동', '박민수'입니다. ① NOT IN은 NULL 처리 문제가 있고 복잡합니다. ③ INTERSECT는 교집합으로 양쪽 부서에 모두 있는 직원을 구합니다. ④ UNION은 합집합으로 모든 직원을 구합니다.