홈 › SQL 중급 › 04 / 11

집합 연산: UNION·UNION ALL·INTERSECT·MINUS/EXCEPT

섹션 6진행 0 / 11

5. 자주 하는 실수 (Tip)

실수 1: 중복이 없는데도 습관적으로 UNION 을 쓴다

연도별 테이블처럼 애초에 겹칠 수 없는 데이터를 합칠 때도 무조건 UNION 을 쓰는 경우가 많습니다. 중복이 없다고 확신하면 UNION ALL 이 더 빠르고 의도도 명확합니다. "혹시 몰라서" UNION 을 쓰는 습관은 불필요한 정렬 비용을 계속 지불하는 셈입니다.

실수 2: 컬럼 순서를 안 맞추고 값만 다르게 넣는다

두 SELECT 의 컬럼 개수만 맞추고 순서는 신경 쓰지 않으면, 오류 없이 실행되지만 엉뚱한 컬럼끼리 합쳐집니다. 예제 3 처럼 타입이 다르면 오류라도 나지만, 둘 다 문자 컬럼이면 오류 없이 "고객명" 자리에 "상태값"이 섞이는 식으로 조용히 잘못됩니다.

실수 3: EXCEPT 한쪽 방향만 확인하고 대사를 끝낸다

A EXCEPT B 만 보고 "이게 전체 차이"라고 판단하는 경우가 많습니다. 변형 4·5 에서 봤듯이 반대 방향(B EXCEPT A)에만 나오는 행(새로 생긴 행)은 따로 확인해야 합니다. 대사는 항상 양방향입니다.

실수 4: 여러 집합 연산을 괄호 없이 섞는다

UNION·EXCEPT·INTERSECT 를 한 문장에 섞어 쓰면서 괄호를 생략하면, 의도한 순서와 다르게 계산될 수 있습니다. sql-src 의 03_dialects.sql 예제처럼 두 개 이상의 집합 연산을 섞을 때는 계산 단위를 괄호로 명시적으로 묶습니다.