← 개념서태블릿/PC 버전
2과목 · SQL 기본 및 활용·10

ORDER BY

ORDER BY 구조, 정렬 안정성, NULL 위치, LIMIT/OFFSET·FETCH와의 결합을 다룹니다.

1. ORDER BY의 위치

ORDER BYSELECT 문의 마지막 단계에서 평가됩니다. 이유: SELECT가 끝난 결과 집합을 정렬하기 때문.

SELECT name, salary FROM emp WHERE dept_id = 10 ORDER BY salary DESC, name ASC;

정렬 키의 참조 방법

-- 컬럼 이름
ORDER BY salary DESC

-- SELECT 별칭 (허용)
SELECT salary * 12 AS annual FROM emp ORDER BY annual DESC;

-- 컬럼 위치(열 순번) — 비추천
ORDER BY 2 DESC

2. 오름차순 / 내림차순

  • ASC (기본, 생략 가능)
  • DESC
ORDER BY salary DESC, hired_at ASC

여러 키를 주면 앞의 키로 먼저 정렬하고, 동률이면 다음 키로.

3. NULL의 위치

DBMS ASC 기본 DESC 기본
Oracle NULL 마지막 NULL 먼저
PostgreSQL NULL 마지막 NULL 먼저
MySQL NULL 먼저 NULL 마지막

고정하려면 NULLS FIRST / NULLS LAST (Oracle, PostgreSQL).

ORDER BY bonus ASC NULLS FIRST;

4. 정렬 안정성 (Stable Sort)

ANSI 표준은 "정렬 키가 같은 행들끼리의 순서"를 보장하지 않습니다. 즉 같은 값이면 실행마다 다른 순서가 나올 수 있음.

-- 안정성을 확보하려면 타이브레이커를 명시
ORDER BY salary DESC, emp_id ASC;

5. 페이징과의 결합

표준 ANSI — OFFSET ... FETCH

SELECT name, salary FROM emp
ORDER BY salary DESC
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

MySQL/PostgreSQL — LIMIT

SELECT name, salary FROM emp
ORDER BY salary DESC
LIMIT 10 OFFSET 20;

Oracle 12c+ 이전 — ROWNUM

SELECT *
FROM (SELECT emp.*, ROWNUM rnum FROM (
        SELECT * FROM emp ORDER BY salary DESC
      ) emp WHERE ROWNUM <= 30)
WHERE rnum > 20;

6. TOP-N과 ORDER BY

"급여가 가장 높은 3명" 같은 쿼리는 ORDER BY ... FETCH FIRST n 형식이 표준.

SELECT name, salary FROM emp ORDER BY salary DESC FETCH FIRST 3 ROWS ONLY;
-- WITH TIES 옵션: 3등과 동일 급여자는 모두 포함
FETCH FIRST 3 ROWS WITH TIES;

7. 성능: 인덱스와 ORDER BY

정렬이 인덱스 순서와 일치하면 별도의 정렬 단계(sort operation)를 피할 수 있습니다.

CREATE INDEX idx_emp_sal ON emp(salary DESC);
SELECT * FROM emp ORDER BY salary DESC FETCH FIRST 10 ROWS ONLY;
-- 인덱스 스캔만으로 Top-10 반환

8. 자주 출제되는 포인트

  • ORDER BYSELECT 뒤에 평가 → SELECT에서 만든 별칭 사용 가능.
  • NULLS FIRST/LAST 옵션.
  • 정렬 키가 같으면 순서 보장 없음 → 타이브레이커 필요.
  • 여러 키 정렬은 앞 키 우선.
  • WITH TIES 는 동점자 포함.

9. 요약 체크리스트

  • ORDER BY가 평가되는 시점과 별칭 사용 가능 여부를 안다.
  • DBMS별 NULL 위치 기본값과 고정 방법을 안다.
  • OFFSET/FETCH로 페이징 쿼리를 쓸 수 있다.
  • Top-N 쿼리에서 WITH TIES 옵션의 효과를 안다.