[Oracle] 오라클 UNION 에서 ORDER BY 정확한 방법
- 데이터베이스/오라클
- 2023. 10. 26.
오라클에서 UNION, UNION ALL을 사용할 때 ORDER BY 절을 사용할 경우 정확한 방법을 숙지하지 않으면 오류가 발생할 수 있다. UNION 쿼리문이 모두 끝나고 마지막에 ORDER BY 절을 선언해야 하며, ORDER BY 절에 사용할 수 있는 칼럼은 UNION의 첫 번째 쿼리문의 별칭 또는 칼럼의 순번이다.
ORDER BY 절을 잘못 사용했을 경우 아래와 같은 오류가 발생할 수 있다.
ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다 00933. 00000 - "SQL command not properly ended" |
목차 |
별칭(칼럼명)으로 정렬하는 방법
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 결과에 포함하고 싶지 않을 때 서브쿼리를 사용하여 정렬을 하면 유용하게 사용할 수 있다.
아래의 포스팅을 참고하면 조금 더 이해하는 것에 도움이 될 것이다.