[Oracle] 오라클 UNION 에서 ORDER BY 정확한 방법

오라클에서 UNION, UNION ALL을 사용할 때 ORDER BY 절을 사용할 경우 정확한 방법을 숙지하지 않으면 오류가 발생할 수 있다. UNION 쿼리문이 모두 끝나고 마지막에 ORDER BY 절을 선언해야 하며, ORDER BY 절에 사용할 수 있는 칼럼은 UNION의 첫 번째 쿼리문의 별칭 또는 칼럼의 순번이다.

 

ORDER BY 절을 잘못 사용했을 경우 아래와 같은 오류가 발생할 수 있다.

ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다
00933. 00000 -  "SQL command not properly ended"

 

 

UNION 에서 ORDER BY 사용법

목차

 

별칭(칼럼명)으로 정렬하는 방법

SELECT empno AS emp_no
     , ename AS emp_nm
     , job   AS emp_job
  FROM emp
 WHERE job = 'MANAGER'
 
 UNION  
 
SELECT empno
     , ename
     , job
  FROM emp
 WHERE job = 'SALESMAN'
  
 ORDER BY emp_job, emp_nm

 

 

UNION 쿼리는 첫 번째 쿼리문의 칼럼명 또는 별칭이 하위 쿼리문에 동일하게 적용된다.

첫 번째 쿼리문에 별칭을 부여하면 하위 쿼리문도 동일한 별칭이 부여된다고 생각하면 된다.

 

UNION 쿼리문의 마지막에 첫 번째 쿼리문의 칼럼 별칭으로 정렬하면 된다.

 

 

첫 번째 쿼리문에 별칭을 부여하지 않았을 경우, 첫 번째 칼럼명이 하위 쿼리문의 별칭으로 부여된다.

첫 번째 쿼리문의 칼럼명이 별칭이므로 해당 칼럼명으로 정렬하면 된다.

 

칼럼 순번으로 정렬하는 방법

SELECT empno AS emp_no  --1
     , ename AS emp_nm  --2
     , job   AS emp_job --3
  FROM emp
 WHERE job = 'MANAGER'
 
 UNION  
 
SELECT empno
     , ename
     , job
  FROM emp
 WHERE job = 'SALESMAN'
  
 ORDER BY 3, 2

 

 

칼럼의 별칭으로 정렬하지 않고 칼럼의 순번을 사용하여 정렬할 수 있다.

3 = emp_job

2 = emp_nm

 

서브쿼리를 사용하여 정렬하는 방법

SELECT emp_no
     , emp_nm
  FROM (
           SELECT empno AS emp_no
                , ename AS emp_nm
                , 1     AS emp_grp
             FROM emp
            WHERE job = 'MANAGER'
 
            UNION  
 
           SELECT empno
                , ename
                , 2
             FROM emp
            WHERE job = 'SALESMAN'
       )
 ORDER BY emp_grp, emp_nm

 

 

UNION 쿼리문의 ORDER BY 방법을 정확히 숙지하지 못해서 서브쿼리를 사용하여 정렬을 하는 경우가 종종 있다. 간단한 정렬은 서브쿼리를 사용하지 않아도 위의 방법을 사용하면 된다.

 

UNION 쿼리를 정렬할 때 서브쿼리를 사용하는 경우는, ORDER BY 칼럼으로 사용은 하지만 SELECT 결과에 포함하고 싶지 않을 때 서브쿼리를 사용하여 정렬을 하면 유용하게 사용할 수 있다.

예제쿼리(테이블포함).txt
0.00MB

 

아래의 포스팅을 참고하면 조금 더 이해하는 것에 도움이 될 것이다.

 

[Oracle] 오라클 UNION, UNION ALL 사용법

오라클에서 여러 개의 SELECT 문 결과를 합치기 위해서는 UNION, UNION ALL을 사용하면 된다. UNION을 사용할 경우 합쳐진 결과에서 중복을 제거한 결과를 반환하고, UNION ALL을 사용하면 중복을 제거하지

gent.tistory.com

 

댓글

Designed by JB FACTORY