카테고리 없음
쿼리 정렬 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;
실무 활용 팁
- 성능 고려사항: ORDER BY는 쿼리 실행의 마지막 단계에서 수행되며, 대량의 데이터를 정렬할 때 성능에 영향을 줄 수 있습니다.
- 인덱스 활용: ORDER BY에 사용하는 열에 인덱스가 있으면 성능이 향상될 수 있습니다.
- 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;
- 정렬 방향 혼합: 여러 열을 기준으로 정렬할 때 각 열마다 정렬 방향을 다르게 지정할 수 있습니다.
sql
SELECT employee_id, department_id, salary FROM employees ORDER BY department_id ASC, salary DESC;
ORDER BY는 데이터 분석과 보고서 생성에 필수적인 요소로, 결과를 논리적이고 의미 있게 구성하는 데 큰 도움이 됩니다.