집합 연산입문

UNION ALL

두 SELECT 결과를 그대로 이어 붙이는 연산 (중복 제거 안 함)

정의

SELECT의 결과를 위아래로 이어 붙인다. 중복된 행이 있어도 그대로 둔다. 컬럼 수와 데이터 타입이 양쪽이 같아야 한다. 비교 대상인 UNION은 중복을 제거하지만, 그 과정에서 정렬·비교 작업이 추가로 일어나 더 느리다.

왜 중요한가?

실무에서는 대부분의 경우 UNION ALL이 정답이다. UNION을 습관적으로 쓰면 매번 중복 제거 작업이 들어가서 느려진다. 중복이 안 생긴다는 게 확실하면(예: 2024년 데이터 + 2025년 데이터) 반드시 UNION ALL을 쓰자.

틀리기 쉬운 포인트

  • !UNION은 중복을 제거하지만 정렬/해시 비용이 큽니다. UNION ALL이 기본값이 되어야 합니다.
  • !컬럼 수와 데이터 타입이 양쪽이 일치해야 합니다. 다르면 묵시적 형변환이나 오류.
  • !ORDER BY는 마지막 SELECT 다음에 한 번만 쓸 수 있습니다.

예시

SELECT id, amount
FROM orders_2024
UNION ALL
SELECT id, amount
FROM orders_2025;

성능 포인트

!UNION은 정렬 후 중복 제거를 위해 PGA 메모리/Temp 공간을 사용한다. UNION ALL은 그런 비용이 없다. 의식적으로 ALL을 붙여라.

관련 개념

관련 카테고리