8절 ORDER BY 절
1. ORDER BY 정렬
ORDER BY 절은 SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용한다.
ORDER BY 절에는 컬럼 명 대신에 ALIAS나 컬럼 순서를 나타내는 정수 사용도 가능하다. 정렬 방식을 정하지 않으면 기본적으로 오름차순으로 정렬되며, SQL 문장의 제일 마지막에 위치한다.
정렬하는 컬럼에 NULL 값이 있다면 NULL 값이 가장 큰 값으로 인정하고 SQL SERVER에서는 반대로 가장 작은 값으로 출력이 된다.
ORDER BY 절의 특징
- 기본적인 정렬 순서는 오름차순이다.
- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된다.
- 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력된다. 즉 현재와 과거 중 과거가 먼저 출력된다.
- Oracle에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림 차순으로 했을 경우에는 가장 먹저 위치한다.
- SQL SERVER 는 위랑 반대다.
사용법
CASE1. 칼럼명 사용 : :ORDER BY DNAME, LOC, DEPTNO
CASE2 컬럼명 + ALIAS 명 사용 : ORDER BY DNAME, AREA, 지역, 부서 DESC
CASE3 컬럼순서 번호 + ALISAS명 사용 : ORDER BY 1, 지역, 3 DESC
2. SELECT 문장 실행 순서
SELECT 문장은 최대 6개의 절로 구성되고 수행 순서는 아래와 같다.
5. SELECT 컬럼명
1. FROM 테이블명
2. WHERE 조건식
3. GROUP BY 컬럼이나 표현식
4. HAVING 그룹조건식
6. ORDER BY 컬럼이나 표현식
1. 발췌 대상 테이블을 참조한다.
2. 발췌 대상을데이터가 아닌 것은 제거한다.
3. 행들을 소그룹화 한다.
4. 그룹핑된 값의 조건에 맞는 것만을 출력된다.
5. 데이터 값을 출력/계산한다.
6. 데이터를 정렬한다.
뒤에 내용은 나중에 정리 (중요한 것 같기도 하고 아닌 것 같기도 하고…
3. TOP N쿼리
-ROWNUM
오라클에서 순위가 높은 N개의 로우를 추출하기 위해 ORDER BY 절과 WHERE 절의 ROWNUM 조건을 같이 사용하는 경우가 있는데 이 두 조건으로 원하는 결과를 얻을 수 없다. ROWNUM은 정렬 되기 전에 먼저 추출되는 것이기 때문이다. 즉 먼저 정렬된 데이터를 구하고 거기서 ROWNUM,을 사용한다면 TOP N 을 구 할 수 있다.
- TOP()
반면 SQL SERVER는 TOP 조건을 사용하게 되면 별도의 처리 없이 관련 ORDER BY 절의 데이터를정렬 후 원하는 데이터를 구할 수 있다.
그리고 WITH TIES 라는 옵션을 주게 된다면
SELECT TOP(2) WHITH TIES ENAME, SAL
FORM EMP
ORDER BY SAL DESC;
이렇게 주게 된다면 순위가 같은 데이터를 출력한다. 2등이 2명이라면 1등 1명, 2등 2명 해서 3명이 출력이 된다.
'SQL > ORACLE' 카테고리의 다른 글
이력 테이블에서 최종 데이터만 조회하기 (0) | 2016.03.18 |
---|---|
오라클에서 개행문자 제거하기 (0) | 2016.03.18 |
오라클 주(WEEK)구하기 (0) | 2015.11.20 |
[ORACLE] BETWEEN AND, 그리고 IN 연산자 (0) | 2015.11.20 |
Oracle 9i #7. 단일 행 함수 (0) | 2015.10.08 |
[order by CASE]oracle order by 질문입니다 (0) | 2015.10.08 |
Oracle WHERE 절 ORDER BY 절 GROUP BY 절 각종함수 (0) | 2015.10.08 |
[order by]sql에서 order by 정렬할때 질문요 (0) | 2015.10.08 |