본문 바로가기

프로그래밍/오라클

[ORACLE] UNION 과 UNION ALL 차이 _ 오라클

[ORACLE] UNION 과 UNION ALL 차이 _ 오라클

PART.1

결론    ||  저는 한국사람이지만, 결론부터 말해보겠습니다. 

UNION은 중복제거가 된 결과가 나타나고, 

UNION ALL은 중복을 포함한 결과가 나타나게 됩니다. 


학생별 평균 마일리지 값을 구하는 쿼리분석중에 있었습니다. 근데, 기존 쿼리를 분석해보니 각 쿼리를 실행해서 더한 값과 그 쿼리들를 UNION ALL로 합쳐서 실행한 결과값이 달랐습니다. 자세히 보니 여러 쿼리중 두 쿼리만 UNION로 작성되었고, 해당 파트를 UNION ALL로 수정해주니 정상적인 결과가 나왔습니다.  


일련의 과정을 간단한 예제로 정확한 차이를 다시 한 번 정리해보자 합니다. 


UNION    || 두 테이블의 결과를 중복을 제거해서 보여준다. 

UNION ALL    || 두 테이블의 결과를 중복을 허용해서 보여준다.




PART.2

예제로 살펴보기    || 테이블 설명, EMP1 & EMP2


EMP1 

EMP2 














예제1. EMP1 테이블과 EMP2 테이블에는 직원에 대한 데이터가 들어있다. 각 테이블에 부서(DEPTNO)별 직업(JOB)을 구하여라.

SELECT DEPTNO
       , JOB
  FROM EMP1
 UNION
SELECT DEPTNO
       , JOB
  FROM EMP2
 ORDER BY DEPTNO, JOB




예제2. EMP1 테이블과 EMP2 테이블에는 직원에 대한 데이터가 들어있다. 두 테이블에 부서(DEPTNO)별 직업(JOB)을 구하여라.  

SELECT DEPTNO
       , JOB
  FROM EMP1
 UNION ALL
SELECT DEPTNO
       , JOB
  FROM EMP2
 ORDER BY DEPTNO, JOB



아래 예제의 결과를 살펴보면 중복 제거 전후의 결과를 확실하게 볼 수 있다. 

UNION ALL _ 중복허용

UNION _ 중복제거















PART.3

꼭 기억할 것.


ORDER BY절은 UNION 함수를 사용한 다음 제일 마지막에 작성해야한다. 실행순서상 정렬은 UNION 다음에 일어나게 되어있다. 위 쿼리에서도 마지막에서 정렬을 시켜준 걸 볼 수 있다. 중간에 넣게되면 에러로 쿼리가 제대로 실행되지 않는다. 


반대로 ORDER BY절에 작성하게 되는 컬럼명제일 첫번째로 작성된 쿼리에 있는 컬럼명 혹은 ALIAS명이어야 한다. 그이유는 UNION은 컬럼의 갯수만 맞으면 결과를 합쳐서 보여주는 것이지 컬럼명과 결과값은 상관이 없기 때문이다.