오라클 SQL - ORDER BY

오라클 SQL - ORDER BY

SQL에서 데이터를 조회할 때 원하는 순서대로 정렬하는 방법이 필요할 때가 많습니다.

그때 사용하는 것이 바로 ORDER BY 절입니다. 

ORDER BY 절은 쿼리 결과의 정렬 순서를 지정하는 역할을 합니다.
결과를 특정 컬럼을 기준으로 오름차순 또는 내림차순으로 정렬할 수 있습니다.

 

기본 문법

ORDER BY의 문법은 다음과 같습니다.

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name [ASC | DESC];
  • column_name : 정렬 기준이 되는 컬럼입니다.
  • ASC : 오름차순 정렬 (작은 값 → 큰 값). 기본값이므로 생략 가능.
  • DESC : 내림차순 정렬 (큰 값 → 작은 값).

예제 테이블

예제를 통해 하나씩 확인해 보겠습니다.
다음과 같은 emp 테이블이 있다고 가정합니다.

 

empno ename job sal deptno
7499 Allen SALESMAN 1600 30
7698 Blake MANAGER 2850 30
7844 Turner SALESMAN 1500 30
7521 Ward SALESMAN 1250 30
7900 James CLERK 950 30

 

오름차순 정렬 (ASC)

급여(sal)를 기준으로 오름차순으로 정렬해 보겠습니다.

SELECT empno, ename, sal
FROM emp
ORDER BY sal;

 

empno ename sal
7521 Ward 1250
7844 Turner 1500
7499 Allen 1600
7698 Blake 2850
7900 James 950

 

내림차순 정렬 (DESC)

이번에는 급여(sal)를 기준으로 내림차순으로 정렬해 보겠습니다.

SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC;

 

empno ename sal
7499 Allen 1600
7844 Turner 1500
7521 Ward 1250
7900 James 950
7698 Blake 2850

 

다중 컬럼 정렬

여러 컬럼을 기준으로 정렬할 수도 있습니다.
예를 들어, 부서 번호(deptno)를 기준으로 먼저 정렬하고, 같은 부서 내에서는 급여(sal)를 내림차순으로 정렬해 보겠습니다.

SELECT empno, ename, deptno, sal
FROM emp
ORDER BY deptno ASC, sal DESC;

 

empno ename deptno sal
7499 Allen 30 1600
7844 Turner 30 1500
7521 Ward 30 1250
7900 James 30 950
7698 Blake 30 2850

 

조건에 따른 정렬 (CASE 문 활용)

급여에 따라 등급을 나누고, 그 등급을 기준으로 정렬하는 예제를 살펴보겠습니다.

SELECT empno,
       ename,
       sal,
       CASE 
           WHEN sal > 2000 THEN '1등급'
           WHEN sal > 1000 THEN '2등급'
           ELSE '3등급'
       END AS sal_grade
FROM emp
WHERE deptno = 30
ORDER BY sal_grade, sal DESC;

실행 과정

  1. CASE 문으로 sal(급여)에 따라 1등급, 2등급, 3등급으로 나누어 sal_grade 컬럼을 생성합니다.
  2. ORDER BY로 sal_grade를 기준으로 오름차순 정렬합니다.
  3. 같은 sal_grade 내에서는 sal을 기준으로 내림차순 정렬합니다.
empno ename sal sal_grade
7499 Allen 1600 2등급
7844 Turner 1500 2등급
7521 Ward 1250 2등급
7900 James 950 3등급
7698 Blake 2850 1등급