ORDER BY와 SELECT 실행 순서
쉽게 말하면
ORDER BY는 결과를 줄 세우는 마지막 단계예요. ASC는 작은 것부터(기본), DESC는 큰 것부터예요. SQL은 표를 읽고, 거르고, 묶고, 칸을 고른 다음 맨 마지막에 정렬해요. 그래서 정렬할 때는 SELECT에서 붙인 새 이름(별칭)도 쓸 수 있어요.
시험용 정의
ORDER BY는 조회 결과를 정렬한다. ASC(오름차순, 기본값)와 DESC(내림차순)가 있고, 열 이름·별칭·SELECT 목록의 위치 번호로 정렬할 수 있다. SELECT 문은 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순서로 처리되며, ORDER BY는 가장 마지막이다.
비유로 이해하기
시험 성적표를 출력하기 직전에 점수 순으로 줄 세우는 단계다. 줄 세우기는 맨 마지막이라, 앞에서 붙인 별명(별칭)을 보고도 줄을 세울 수 있다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| ASC | Ascending, 오름차순. 작은 값 → 큰 값. 생략하면 이것 |
| DESC | Descending, 내림차순. 큰 값 → 작은 값 |
| 위치 번호 | SELECT 목록의 몇 번째 열인지. ORDER BY 2 = 두 번째 열 |
| 실행 순서 | DBMS가 SELECT 문의 각 절을 실제로 처리하는 순서. 쓰는 순서와 다르다 |
SELECT 문 실행 순서
| 순서 | 절 | 하는 일 |
|---|---|---|
| 1 | FROM | 대상 테이블을 읽는다 |
| 2 | WHERE | 행을 거른다 |
| 3 | GROUP BY | 그룹으로 묶는다 |
| 4 | HAVING | 그룹을 거른다 |
| 5 | SELECT | 보여 줄 열을 계산하고 별칭을 붙인다 |
| 6 | ORDER 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가 없으면 결과 순서는 보장되지 않는다
시험에 이렇게 나와요
- SELECT 실행 순서 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- ORDER BY에서 별칭·위치 번호 가능, WHERE·GROUP BY에서는 별칭 불가
- NULL 정렬 위치: Oracle은 가장 큰 값, SQL Server는 가장 작은 값
- DESC는 바로 앞 열에만 적용, 여러 열 정렬 결과 순서
- GROUP BY·DISTINCT가 있을 때 SELECT에 없는 열로 정렬 불가
출제 범위·공식 안내 기반
확인 문제
Q1. Oracle에서 COMM(수당)을 내림차순으로 정렬하면 COMM이 NULL인 행은 어디에 올까요?
- 결과에서 빠진다
- 맨 앞
- 맨 뒤
- 중간
정답 보기
2번 맨 앞
Oracle은 NULL을 가장 큰 값으로 취급한다. 그래서 오름차순이면 맨 뒤, 내림차순이면 맨 앞이다. SQL Server는 반대로 가장 작은 값으로 본다.
Q2. SELECT 문의 실행 순서로 옳은 것은?
- FROM → WHERE → SELECT → GROUP BY → ORDER BY
- SELECT → FROM → WHERE → ORDER BY
- FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- 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인 행은?
- 결과에서 빠짐
- 맨 뒤
- 오류
- 맨 앞
정답 보기
4번 맨 앞
SQL Server는 NULL을 가장 작은 값으로 본다. Oracle이면 맨 뒤.
Q4. 다음 중 오류가 나는 SQL은?
- SELECT ename FROM emp ORDER BY sal
- SELECT ename, sal AS s FROM emp WHERE s > 3000
- SELECT ename, sal FROM emp ORDER BY 2
- 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번 부서 오름차순, 같은 부서 안에서 급여 내림차순
DESC는 바로 앞 열(sal)에만 붙는다.
Q6. ORDER BY 2 의 뜻은?
- 두 번째 행부터 정렬
- SELECT 목록의 두 번째 열로 정렬
- 값 2를 기준으로 정렬
- 오류
정답 보기
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를 써야 한다.