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 | 널을 뒤쪽으로 정렬 ( 오름차순 정렬 시 기본값) |
ORDER BY 절에 PK 제약 조건의 열을 포함시키면 정렬 순서가 변경되지 않는다.
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을 기준으로 오름차순 정렬
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] - 오라클)바인드 변수
DEFINE v1 = 1;
SELECT * FROM dept ORDER BY DECODE('&v1', 1, dname, 2, 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;
샘플 테이블 생성
'Develop > DATABASE' 카테고리의 다른 글
오라클)집계 함수 - 통계 함수(STDDEV, VARIANCE, STATS_MODE) (0) | 2022.10.27 |
---|---|
오라클)집계 함수 - 기본함수(COUNT, MIN, MAX, SUM, AVG) (0) | 2022.10.26 |
오라클)WHERE 절 - NULL, LNVVL (0) | 2022.10.10 |
오라클)WHERE 절 - LIKE (0) | 2022.10.10 |
오라클)WHERE 절 - IN (0) | 2022.10.05 |
댓글