본문 바로가기

DB

[SQLD] ORDER BY. SELECT 문으로 얻어온 데이터를 정렬해보자.

반응형

ORDER BY

1. SELECT 문을 통해 얻어온 결과를 특정 칼럼 기준으로 오름차순 혹은 내림차순으로 정렬한다. 

2. ORDER BY의 정렬 시점은 모든 실행이 끝난 후, 데이터 출력 직전이다. 

3. 메모리를 많이 잡아 먹는다. (성능 저하 주의) 

4. SELECT <컬럼명> FROM <테이블명> 

ORDER BY <컬럼명> (ASC/DESC);

 

5. 예시 

SELECT EMPNO, ENAME, SAL
FROM EMP
ORDER BY EMPNO DESC;

SELECT EMPNO, ENAME
FROM EMP
ORDER BY ENAME ASC;

SELECT EMPNO, ENAME
FROM EMP
ORDER BY ENAME ASC;

6. ASC는 오름차순이다. 작은 수에서 큰 수로 정렬된다. 100 ~ 1로 

7. DESC는 내림차순이다. 큰수에서 작은 수로 정렬된다. 1~ 100으로 

 

칼럼 번호를 이용한 정렬

1. SELECT EMPNO, ENAME, SAL FROM EMP

ORDER BY 3 ASC;

 

→ 3번 칼럼을 기준으로 오름차순 한다는 뜻이다. 

 

정렬의 연산 시점

1. ORDER BY의 연산 시점은 SELECT가 끝나고 이루어진다. 

FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 

 

WHERE 조건문이 있는 경우 WHERE이 끝나고 정렬된다. 

 

출력되지 않는 컬럼을 이용한 정렬 

1. 컬럼이 3번까지 있는데 4번을 기준으로 정렬하려고 하면 오류가 난다. 

ORDER BY
3을 입력하면 된다.

SELECT에 COMM을 넣어주면 정상적으로 실행된다. 

 

NULL과 정렬

1. NULL이 포함된 칼럼을 기준으로 정렬하면 ORACLE에서 무한대를 의미한다. 즉, NULL이 가장 큰 숫자로 인식됨.

2. ASC를 하면? NULL이 맨 아래에 보인다. 

3. DESC를 하면? NULL이 제일 위에 보인다. 

4. 예시 - ORDER BY COMM DESC; 

NULL은 무한대

 

ORDER BY 문제

1. 사원의 이름, 급여, 커미션을 가져온다. 급여를 기준으로 내림차순 정렬을 한다. 급여가 같다면 이름을 기준으로 오름차순 정렬을 한다. 

SELECT EMPNO, ENAME, HIREDATE
FROM EMP
WHERE HIREDATE BETWEEN '1981/01/01' AND '1981/12/31'
ORDER BY HIREDATE DESC;

 

2. 1981년에 입사한 사원들의 사원번호, 사원이름, 입사일을 가져온다. 사원번호를 기준으로 내림차순 정렬을 한다. 

SELECT ENAME, SAL, COMM 
FROM EMP
ORDER BY SAL DESC, ENAME ASC;

 

 

반응형