문제
다음 SQL에서 집합 연산자의 실행 결과로 가장 적절한 것은?
SQL-- 테이블 A: VALUES (1), (2), (3) -- 테이블 B: VALUES (2), (3), (4) -- 테이블 C: VALUES (3), (4), (5) SELECT * FROM A UNION ALL SELECT * FROM B EXCEPT SELECT * FROM C;
① {1, 2, 3, 2, 3, 4} - {3, 4, 5} = {1, 2, 2} ② {1, 2, 3, 4} - {3, 4, 5} = {1, 2} ③ 구문 오류 발생 ④ {1, 2, 2} (EXCEPT가 무시됨)
정답
2번
해설
②가 정답입니다. 먼저 A UNION ALL B의 결과는 1, 2, 3, 2, 3, 4입니다. 그 다음 EXCEPT는 기본적으로 중복을 제거하는 집합 연산이므로, 왼쪽 결과의 distinct 값 {1, 2, 3, 4}에서 C의 값 {3, 4, 5}를 제외하면 최종 결과는 {1, 2}입니다. 즉 중복 2를 그대로 남기는 ①의 해설은 EXCEPT ALL과 혼동한 것입니다.