본문 바로가기
Develop/DATABASE

오라클)ORDER BY 절 - ASC, DESC, NULLS FIRST, NULLS LAST

by 걸어다니는 종합병원 2022. 10. 23.
반응형

ORDER BY 절을 사용하면 SELECT 문의 결과를 정렬할 수 있다.

ORDER BY 절은 SELECT 문의 마지막에 기술하며, SELECT 절이 수행된 후 수행된다.

1. SELECT 

2. FROM

3. WHERE

4. ORDER BY

순서대로 수행된다.

 

ORDER BY 절 - ORDER BY {expr | postion | c_calias} [ASC | DESC] [NULLLS FIRST | NULLS LAST]

                                            [, {expr | postion | c_calias} [ASC | DESC] [NULLLS FIRST | NULLS LAST]] ....

 

항목 설명  
ASC 오름차순으로 정렬 ( 기본값 )
DESC 내림차순으로 정렬
NULLS FIRST 널을 앞쪽으로 정렬 ( 내림차순 정렬 시 기본값)
NULLS LAST 널을 뒤쪽으로 정렬 ( 오름차순 정렬 시 기본값)

deptno가 30 조회


deptno가 30인 행의 sal기준 내림차순 정렬


deptno가 30이고 sal과 empno로 내림차순 정렬

ORDER BY 절에 PK 제약 조건의 열을 포함시키면 정렬 순서가 변경되지 않는다.


deptno가 30이고 sal 내림차순


deptno가 30이고 sal은 오름차순, comm은 내림차순

SELECT ename, sal, comm FROM emp WHERE deptno = 30 ORDER BY 2 DESC, 3;
SELECT ename, sal, comm FROM emp WHERE deptno = 30 ORDER BY 2 DESC, comm;

 

SELECT 절이 ORDER BY 절보다 먼저 수행되기 때문에 열 위치를 참조할 수 있다. 

 


열 별칭을 사용하여 문자 값으로 결과가 정렬

열로 검색 시에는 sal을 기준으로 오름차순 정렬


오름차순은 NULL을 뒤쪽에 정렬


NULLS FIRST 키워드 사용시 NULL을 앞쪽으로 정렬


내림차순은 NULL을 앞쪽으로 정렬


NULL LAST 키워드 사용시 오름차순이지만 NULL이 뒤쪽으로 정렬


SELECT ename, deptno, 'ABC' AS c1 FROM emp WHERE deptno = 10 ORDER BY ename;

WHERE 절에 등가 조건 (=)을 사용한 열은 결과 값이 동일하므로 ORDER BY 절에 기술할 필요가 없음. c1도 마찬가지

 


조건 정렬

ORDER BY 절에 DECODE 함수나 CASE 표현식을 사용하면 조건에 따라 다른 정렬 기준을 지정

전체 데이터

2022.10.02 - [Develop/DATABASE] - 오라클)인코딩 디코딩 함수 - DECODE


job을 MANAGER, CLERK 순서로 먼저 정렬하고, sal를 오름차순으로 정렬.

job이 MANAGER면 1열 CLERK이면 2열로 정렬


deptno가 10이거나 30인 행에서 deptno 가 10인 행은 sal을 내림차순, 30인 행은 comm과 sal을 오름차순 정렬

 

deptno가 10인 경우에 ORDER BY sal DESC, NULL, sal -> ORDER BY sal DESC

deptno가 30인 경우에 ORDER BY NULL DESC, comm, sal -> ORDER BY comm, sal

 

※ ORDER BY 절의 열을 가공하면 쿼리의 성능이 저하될 수 있기 때문에 정렬할 데이터가 크지 않은 경우에만 사용하자.

 

동적 정렬

바인드 변수를 사용하여 정렬 순서를 동적으로 조정

SQL DEVELOPER에서는 변수를 사용하기 위해서 DEFINE을 사용하면 된다.

 

바인드 변수는 SQLPLUS에서 사용 가능하다.

2022.09.23 - [Develop/DATABASE] - 오라클)바인드 변수

dname로 정렬

DEFINE v1 = 1;
SELECT * FROM dept ORDER BY DECODE('&v1', 1, dname, 2, loc);

위와 동일한 결과를 반환한다.


loc로 정렬

DEFINE v1 = 2;
SELECT * FROM dept ORDER BY DECODE('&v1', 1, dname, 2, loc);

 

정렬 순서 조정

캐릭터 셋에 따라 특수문자, 숫자, 영문 한글의 정렬 순서가 달라질 수 있다.

DROP TABLE t1 PURGE;

CREATE TABLE t1 (c1 VARCHAR2(10));
INSERT INTO t1 VALUES('@');
INSERT INTO t1 VALUES('!');
INSERT INTO t1 VALUES('2');
INSERT INTO t1 VALUES('1');
INSERT INTO t1 VALUES('B');
INSERT INTO t1 VALUES('A');
INSERT INTO t1 VALUES('나');
INSERT INTO t1 VALUES('가');
commit;

샘플 테이블 생성


정규식을 활용하여 정렬

반응형

댓글