카테고리 없음

쿼리 정렬 ORDER BY

deadlock 2025. 4. 13. 19:59

ORDER BY 기초

ORDER BY 절은 SQL 쿼리 결과를 특정 열을 기준으로 정렬할 때 사용합니다. 쿼리 결과의 출력 순서를 제어하는 중요한 요소입니다.

기본 구문

 
sql
SELECT 열_이름(들)
FROM 테이블_이름
[WHERE 조건]
ORDER BY 정렬_기준_열 [ASC|DESC] [NULLS FIRST|NULLS LAST];

기본 사용법

기본 정렬 (오름차순)

 
sql
-- 기본값은 오름차순(ASC)
SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary;

내림차순 정렬

 
sql
-- DESC 키워드로 내림차순 정렬
SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary DESC;

여러 열 기준 정렬

 
sql
-- 부서별로 먼저 정렬한 후, 같은 부서 내에서는 급여 내림차순으로 정렬
SELECT employee_id, first_name, last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;

고급 기능

1. 열 위치로 정렬

 
sql
-- SELECT 목록의 세 번째 열(salary)을 기준으로 정렬
SELECT employee_id, first_name, salary, department_id
FROM employees
ORDER BY 3 DESC;

2. 별칭(Alias)으로 정렬

 
sql
SELECT employee_id, first_name, salary*12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;

3. 표현식으로 정렬

 
sql
-- 수식 결과를 기준으로 정렬
SELECT employee_id, first_name, salary, commission_pct
FROM employees
ORDER BY salary * NVL(commission_pct, 0) DESC;

4. NULL 값 처리

 
sql
-- NULL 값을 처음에 표시
SELECT employee_id, first_name, commission_pct
FROM employees
ORDER BY commission_pct NULLS FIRST;

-- NULL 값을 마지막에 표시 (기본값)
SELECT employee_id, first_name, commission_pct
FROM employees
ORDER BY commission_pct NULLS LAST;

5. CASE 표현식과 함께 사용

 
sql
-- 직무에 따라 다른 순서로 정렬
SELECT employee_id, first_name, job_id
FROM employees
ORDER BY 
  CASE job_id 
    WHEN 'PRESIDENT' THEN 1 
    WHEN 'VP' THEN 2 
    WHEN 'MANAGER' THEN 3 
    ELSE 4 
  END;

실무 활용 팁

  1. 성능 고려사항: ORDER BY는 쿼리 실행의 마지막 단계에서 수행되며, 대량의 데이터를 정렬할 때 성능에 영향을 줄 수 있습니다.
  2. 인덱스 활용: ORDER BY에 사용하는 열에 인덱스가 있으면 성능이 향상될 수 있습니다.
  3. TOP-N 쿼리: ROWNUM이나 FETCH 절과 함께 사용하여 상위/하위 N개 행만 조회할 수 있습니다.
     
    sql
    -- 급여 상위 5명 조회 (12c 이전)
    SELECT * FROM (
      SELECT employee_id, first_name, salary
      FROM employees
      ORDER BY salary DESC
    ) WHERE ROWNUM <= 5;
    
    -- 급여 상위 5명 조회 (12c 이상)
    SELECT employee_id, first_name, salary
    FROM employees
    ORDER BY salary DESC
    FETCH FIRST 5 ROWS ONLY;
  4. 정렬 방향 혼합: 여러 열을 기준으로 정렬할 때 각 열마다 정렬 방향을 다르게 지정할 수 있습니다.
     
    sql
    SELECT employee_id, department_id, salary
    FROM employees
    ORDER BY department_id ASC, salary DESC;

ORDER BY는 데이터 분석과 보고서 생성에 필수적인 요소로, 결과를 논리적이고 의미 있게 구성하는 데 큰 도움이 됩니다.