공든탑앱 열기

ORDER BY와 SELECT 실행 순서

SQLD (SQL 개발자) · SQL 기본 · 약 12분

쉽게 말하면

ORDER BY는 결과를 줄 세우는 마지막 단계예요. ASC는 작은 것부터(기본), DESC는 큰 것부터예요. SQL은 표를 읽고, 거르고, 묶고, 칸을 고른 다음 맨 마지막에 정렬해요. 그래서 정렬할 때는 SELECT에서 붙인 새 이름(별칭)도 쓸 수 있어요.

시험용 정의

ORDER BY는 조회 결과를 정렬한다. ASC(오름차순, 기본값)와 DESC(내림차순)가 있고, 열 이름·별칭·SELECT 목록의 위치 번호로 정렬할 수 있다. SELECT 문은 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순서로 처리되며, ORDER BY는 가장 마지막이다.

비유로 이해하기

시험 성적표를 출력하기 직전에 점수 순으로 줄 세우는 단계다. 줄 세우기는 맨 마지막이라, 앞에서 붙인 별명(별칭)을 보고도 줄을 세울 수 있다.

자세히

먼저 알아 둘 말

말뜻
ASCAscending, 오름차순. 작은 값 → 큰 값. 생략하면 이것
DESCDescending, 내림차순. 큰 값 → 작은 값
위치 번호SELECT 목록의 몇 번째 열인지. ORDER BY 2 = 두 번째 열
실행 순서DBMS가 SELECT 문의 각 절을 실제로 처리하는 순서. 쓰는 순서와 다르다

SELECT 문 실행 순서

순서절하는 일
1FROM대상 테이블을 읽는다
2WHERE행을 거른다
3GROUP BY그룹으로 묶는다
4HAVING그룹을 거른다
5SELECT보여 줄 열을 계산하고 별칭을 붙인다
6ORDER BY결과를 정렬한다

정렬 규칙

  • ORDER BY job, sal DESC: JOB 오름차순, 같은 JOB 안에서 SAL 내림차순. DESC는 바로 앞 열에만 붙는다
  • 별칭과 위치 번호를 쓸 수 있다: ORDER BY 연봉, ORDER BY 2. 위치 번호는 SELECT 열 수보다 크면 오류
  • SELECT에 없는 열로도 정렬할 수 있다 (단, DISTINCT·GROUP BY·집합 연산을 쓸 때는 SELECT에 있는 것만)
  • NULL 위치: Oracle은 가장 큰 값, SQL Server는 가장 작은 값. Oracle은 NULLS FIRST / NULLS LAST로 바꿀 수 있다
  • ORDER BY가 없으면 결과 순서는 보장되지 않는다

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. Oracle에서 COMM(수당)을 내림차순으로 정렬하면 COMM이 NULL인 행은 어디에 올까요?

  1. 결과에서 빠진다
  2. 맨 앞
  3. 맨 뒤
  4. 중간
정답 보기

2번 맨 앞

Oracle은 NULL을 가장 큰 값으로 취급한다. 그래서 오름차순이면 맨 뒤, 내림차순이면 맨 앞이다. SQL Server는 반대로 가장 작은 값으로 본다.

Q2. SELECT 문의 실행 순서로 옳은 것은?

  1. FROM → WHERE → SELECT → GROUP BY → ORDER BY
  2. SELECT → FROM → WHERE → ORDER BY
  3. FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
  4. FROM → SELECT → WHERE → GROUP BY
정답 보기

3번 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

FROM부터 읽고 ORDER BY가 마지막이다.

Q3. SQL Server에서 ORDER BY comm ASC 를 하면 COMM이 NULL인 행은?

  1. 결과에서 빠짐
  2. 맨 뒤
  3. 오류
  4. 맨 앞
정답 보기

4번 맨 앞

SQL Server는 NULL을 가장 작은 값으로 본다. Oracle이면 맨 뒤.

Q4. 다음 중 오류가 나는 SQL은?

  1. SELECT ename FROM emp ORDER BY sal
  2. SELECT ename, sal AS s FROM emp WHERE s > 3000
  3. SELECT ename, sal FROM emp ORDER BY 2
  4. SELECT ename, sal AS s FROM emp ORDER BY s
정답 보기

2번 SELECT ename, sal AS s FROM emp WHERE s > 3000

WHERE는 SELECT보다 먼저 처리되어 별칭 s를 모른다.

Q5. ORDER BY deptno, sal DESC 의 정렬로 옳은 것은?

  1. 부서 오름차순, 같은 부서 안에서 급여 내림차순
  2. 급여 내림차순, 같은 급여에서 부서 오름차순
  3. 부서 내림차순, 급여 오름차순
  4. 부서와 급여 모두 내림차순
정답 보기

1번 부서 오름차순, 같은 부서 안에서 급여 내림차순

DESC는 바로 앞 열(sal)에만 붙는다.

Q6. ORDER BY 2 의 뜻은?

  1. 두 번째 행부터 정렬
  2. SELECT 목록의 두 번째 열로 정렬
  3. 값 2를 기준으로 정렬
  4. 오류
정답 보기

2번 SELECT 목록의 두 번째 열로 정렬

ORDER BY에는 위치 번호를 쓸 수 있다.

헷갈리기 쉬운 O·X

ORDER BY job, sal DESC 는 job과 sal 모두 내림차순이다.

정답 보기

X DESC는 sal에만 붙는다. job은 기본값 ASC.

ORDER BY 절에는 SELECT 절에 없는 열을 쓸 수 있다.

정답 보기

O 단, DISTINCT·GROUP BY·집합 연산이 있으면 SELECT 목록에 있는 것만 쓸 수 있다.

ORDER BY가 없어도 결과는 항상 입력한 순서대로 나온다.

정답 보기

X 순서를 보장하려면 ORDER BY를 써야 한다.

함께 보면 좋은 개념