ORDER BY절을 이용해서 데이터를 정렬할 수 있다.
`ORDER BY [컬럼] ASC(오름차순) 나 DESC(내림차순)` 와 같은 형식으로 사용한다.
ORDER BY [컬럼] 뒤에 아무 구문도 없으면 디폴트는 오름차순이다.
Null값의 경우에는 오름차순에서는 가장 뒤에, 내림차순에서는 가장 앞에 오게 된다.
SELECT empno, ename, job, sal, hiredate, deptno
FROM emp
ORDER BY hiredate;
위와 같이 SQL문을 작성하면 hiredate의 오름 차순으로 정렬되고, hiredate 뒤에 DESC를 넣어주면 내림차순으로 정렬된다.
SELECT empno, ename, job, sal, sal*12 annsal
FROM emp
ORDER BY annsal;
결과>
EMPNO ENAME JOB SAL ANNSAL
----- -------------------- ------------------ ---------- ----------
7369 SMITH CLERK 800 9600
7900 JAMES CLERK 950 11400
7876 ADAMS CLERK 1100 13200
7521 WARD SALESMAN 1250 15000
7654 MARTIN SALESMAN 1250 15000
7934 MILLER CLERK 1300 15600
7844 TURNER SALESMAN 1500 18000
7499 ALLEN SALESMAN 1600 19200
7782 CLARK MANAGER 2450 29400
7698 BLAKE MANAGER 2850 34200
7566 JONES MANAGER 2975 35700
EMPNO ENAME JOB SAL ANNSAL
----- -------------------- ------------------ ---------- ----------
7788 SCOTT ANALYST 3000 36000
7902 FORD ANALYST 3000 36000
7839 KING PRESIDENT 5000 60000
위 구문은 sal*12를 annsal로 alias시킨 명령문이다. alias시킨 칼럼도 오름차순 정렬이 되는 것을 확인할 수 있다.
SELECT empno, ename, job, sal, sal*12 annsal
FROM emp
ORDER BY sal*12;
결과>
EMPNO ENAME JOB SAL ANNSAL
------ -------------------- ------------------ ---------- ----------
7369 SMITH CLERK 800 9600
7900 JAMES CLERK 950 11400
7876 ADAMS CLERK 1100 13200
7521 WARD SALESMAN 1250 15000
7654 MARTIN SALESMAN 1250 15000
7934 MILLER CLERK 1300 15600
7844 TURNER SALESMAN 1500 18000
7499 ALLEN SALESMAN 1600 19200
7782 CLARK MANAGER 2450 29400
7698 BLAKE MANAGER 2850 34200
7566 JONES MANAGER 2975 35700
EMPNO ENAME JOB SAL ANNSAL
------ -------------------- ------------------ ---------- ----------
7788 SCOTT ANALYST 3000 36000
7902 FORD ANALYST 3000 36000
7839 KING PRESIDENT 5000 60000
위 구문처럼 annsal로 alias시킨 것과 별개로 sal*12로 정렬시킨 것을 볼 수 있다.
이처럼 계산식도 정렬에 활용할 수 있다.
SELECT empno, ename, job, sal, sal*12 annsal
FROM emp
ORDER BY 5
결과>
EMPNO ENAME JOB SAL ANNSAL
----- -------------------- ------------------ ---------- ----------
7369 SMITH CLERK 800 9600
7900 JAMES CLERK 950 11400
7876 ADAMS CLERK 1100 13200
7521 WARD SALESMAN 1250 15000
7654 MARTIN SALESMAN 1250 15000
7934 MILLER CLERK 1300 15600
7844 TURNER SALESMAN 1500 18000
7499 ALLEN SALESMAN 1600 19200
7782 CLARK MANAGER 2450 29400
7698 BLAKE MANAGER 2850 34200
7566 JONES MANAGER 2975 35700
EMPNO ENAME JOB SAL ANNSAL
----- -------------------- ------------------ ---------- ----------
7788 SCOTT ANALYST 3000 36000
7902 FORD ANALYST 3000 36000
7839 KING PRESIDENT 5000 60000
위 구문은 출력 칼럼 중 5번째 칼럼의 오름차순으로 정렬하라는 명령이다.
이처럼 칼럼의 순서로 지정해 줄 수도 있다.
정렬하려는 값이 같은 값이 여러 개라면 그것도 정렬해줄 수 있게하는 방법이 있다.
아래 구문을 참고하자.
SELECT ename, job, deptno, sal
FROM emp
ORDER BY deptno, sal DESC;
위 구문은 deptno의 오름차순으로 정렬하고 같은 값이 있으면 sal의 내림차순으로 정렬하라는 명령이다.
결과는 아래와 같다.
ENAME JOB DEPTNO SAL
-------------------- ------------------ ---------- ----------
KING PRESIDENT 10 5000
CLARK MANAGER 10 2450
MILLER CLERK 10 1300
SCOTT ANALYST 20 3000
FORD ANALYST 20 3000
JONES MANAGER 20 2975
ADAMS CLERK 20 1100
SMITH CLERK 20 800
BLAKE MANAGER 30 2850
ALLEN SALESMAN 30 1600
TURNER SALESMAN 30 1500
ENAME JOB DEPTNO SAL
-------------------- ------------------ ---------- ----------
MARTIN SALESMAN 30 1250
WARD SALESMAN 30 1250
JAMES CLERK 30 950
문제> EMP 테이블에서 첫번째 정렬은 부서번호로, 두번째 정렬은 업무로, 세번째 정렬은 급여가 많은 순으로 정렬하여
사원번호, 성명, 입사일자, 부서번호, 업무, 급여를 출력하여라.
SELECT empno, ename, hiredate, deptno, job, sal
FROM emp
ORDER BY deptno, job, sal DESC;