오라클에서 여러 개의 SELECT 결과를 하나로 합치고 싶을 때 사용하는 문법이 UNION과 UNION ALL이다. 두 문법은 사용방법은 비슷하지만 동작 방식과 성능 결과는 많이 다르다...! 이 차이를 정확하게 이해하지 못하면 의도하지 않는 결과를 만들 수 있기 때문에 이해하고 넘어가자..!!
1. UNION이란?
- 여러 SELECT결과를 하나로 합친뒤에 중복행을 제거한다.
- 내부적으로 DISTINCT를 수행한다.
- 중복된 DEPTNO값은 1번만 출력된다.
SELECT DEPTNO
FROM EMP
UNION
SELECT DEPTNO
FROM DEPT;
2. UNION ALL
- 여러 SELECT결과를 그대로 모두 합친다.
- 중복제거가 없다.
- 같은 값이 있으면 중복되어서 출력된다.
SELECT DEPTNO
FROM EMP
UNION ALL
SELECT DEPTNO
FROM DEPT;
3. 기본 사용 규칙
UNION과 UNION ALL을 사용할때는 반드시 다음 조건을 만족해야 함...!
- SELECT문의 컬럼 개수가 동일해야 한다.
- 각 컬럼의 데이터 타입이 서로 호환되어야 한다.
- 컬럼 이름은 첫번째 SELECT기준으로 결정된다.
SELECT EMPNO
, ENAME
FROM EMP
UNION
SELECT DEPTNO
, DNAME
FROM DEPT;
컬럼 개수와 타입이 맞지 않으면 에러 발생
4. 결과차이 예제
예시 데이터
EMP 테이블 DEPTNO: 10, 20, 30
DEPT 테이블 DEPTNO: 10, 20, 40
UNION 결과
10
20
30
40
UNION ALL 결과
10
20
30
10
20
40
중복 제거 여부가 가장 큰 차이이다...!
5. 성능 차이
UNION
- 중복 제거를 위해 정렬 작업을 수행
- 데이터가 많을수록 성능이 저하됨.
UNION ALL
- 단순히 결과를 붙이기만 함
- 정렬이 없다 -> 훨씬 빠름
6. ORDER BY 사용 위치 주의
UNION / UNION ALL에서는 각 SELECT에 ORDER BY를 쓸 수 없다.
SELECT EMPNO
FROM EMP
UNION ALL
SELECT DEPTNO
FROM DEPT
ORDER BY 1;
ORDER BY는 맨 마지막에 한 번만 사용 가능하다.
마무리
오늘은 UNION과 UNION ALL에 대해 알아보았다. 사용 방법만 보면 거의 차이가 없지만 실제로는 결과에 차이가 있다. 중복을 허용하냐 안 하냐의 차이다 매우 중요하다..! 쿼리를 하다 보면 헷갈릴 때가 있는데 이참에 정리를 해두면 좋을 거 같다. UNION은 결과를 합친 뒤에 자동으로 중복을 제거하기 때문에 데이터의 정확성 면에서 장점이 있다 하지만 정렬작업을 하기때문에 데이터가 많을수록 성능에 부담을 준다. UNION ALL은 중복 제거를 하지 않는 대신에 정렬작업을 수행하지 않아 빠르게 동작한다. 중복이 존재해도 상관없는 경우라면 UNION ALL이 더 효율적이다. 상황에 맞게 사용하자...! 감사합니다. (_ _)
'오라클' 카테고리의 다른 글
| [오라클] COUNT(*) 와 COUNT(컬럼)의 차이 완벽 정리 (0) | 2026.01.20 |
|---|---|
| [오라클] PARTITION BY 완벽 정리 (0) | 2026.01.17 |
| [오라클] DELETE vs DROP vs TRUNCATE 완벽 정리 (0) | 2026.01.16 |
| [오라클] DROP 문 완벽 정리 (1) | 2026.01.15 |
| [오라클] ALTER 문 완벽 정리 (0) | 2026.01.14 |