정렬

DB 2009. 6. 2. 13:54

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;

[출처] 정렬|작성자 이경모

'DB' 카테고리의 다른 글

SQL연산자  (0) 2009.06.02
연산자 우선 순위  (0) 2009.06.02
자형 함수  (0) 2009.06.02
숫자형 함수  (0) 2009.06.02
DUAL 테이블  (0) 2009.06.02
Posted by 으랏차
,