📘꼬부기의 성장서재/이기적SQLD 기출문제

ORDER BY절

서화 2026. 3. 31. 22:54

✔️ ORDER BY란?

ORDER BY는 조회된 결과를 특정 컬럼 기준으로 정렬할 때 사용하는 문법이다 SQL 실행 순서상 가장 마지막에 실행되며, SELECT로 뽑아낸 결과를 다시 원하는 기준으로 재배치하는 역할을 한다

✔️ ORDER BY 실행 순서

ORDER BY는 FROM, WHERE, GROUP BY, HAVING, SELECT가 끝난 뒤 마지막에 실행된다.
그래서 ORDER BY는 “데이터를 찾는 문법”이라기보다 “조회된 결과를 보기 좋게 정리하는 문법”이라고 생각하면 편하다

✔️ 기본 정렬 방식

ORDER BY 뒤에는 정렬 기준이 되는 컬럼을 적는다
이때 ASC는 오름차순, DESC는 내림차순을 의미한다 그리고 ASC는 생략 가능하며, 생략하면 기본값으로 오름차순이 적용된다

예시)

SELECT MOVIE_NAME, RATING
FROM MOVIE_INFO
ORDER BY RATING;

이 쿼리는 평점을 기준으로 오름차순 정렬한다. 즉 값이 작은 것부터 큰 것 순서대로 출력된다.
반대로 높은 점수부터 보고 싶다면 DESC를 붙이면 된다.

예시)

SELECT MOVIE_NAME, RATING
FROM MOVIE_INFO
ORDER BY RATING DESC;

✔️ 여러 컬럼으로 정렬하기

정렬 기준은 하나만 쓰는 것이 아니라 여러 개를 함께 줄 수 있다.
이 경우 앞에 쓴 컬럼을 먼저 기준으로 정렬하고, 그 값이 같을 때 다음 컬럼 기준으로 다시 정렬한다

예시)

SELECT MOVIE_NAME, GENRE, RATING
FROM MOVIE_INFO
ORDER BY GENRE, RATING DESC;

여기서 중요한 점은 ORDER BY GENRE, RATING DESC가 “둘 다 내림차순”이라는 뜻이 아니라는 점이다.
GENRE는 기본값인 오름차순이 적용되고, RATING만 내림차순이 적용된다. 따라서 각 컬럼마다 정렬 방향을 따로 생각해야 한다.

✔️ ORDER BY에서 사용할 수 있는 표현

ORDER BY는 꼭 컬럼명만 쓰는 문법이 아니다.
일반 컬럼, 숫자, 별칭, 혼용 방식, CASE 문법까지 ORDER BY 뒤에 사용할 수 있다 따라서 정렬 기준을 생각보다 다양하게 줄 수 있다

✔️  일반 컬럼으로 정렬

가장 기본적인 방식이다

예시) 티켓 가격 기준 오름차순

SELECT MOVIE_NAME, TICKET_PRICE
FROM MOVIE_INFO
ORDER BY TICKET_PRICE ASC;

✔️ 숫자로 정렬

ORDER BY에는 SELECT절에 적힌 컬럼 순서를 숫자로 적어서 정렬할 수도 있다.
예시) SELECT에서 세 번째 컬럼이 RATING이라면 ORDER BY 3 DESC는 ORDER BY RATING DESC와 같은 의미다

SELECT MOVIE_NAME, GENRE, RATING
FROM MOVIE_INFO
ORDER BY 3 DESC;

이방법은 가독성이 떨어지고 컬럼순사가 바뀌면 의미가 달라질수도 있으니 숫자보다는 컬럼명이나 별칭을 쓰는게 좋다

✔️ 일반 컬럼, 숫자 혼용해서 정렬

ORDER BY에서는 일반 컬럼, 숫자, 별칭을 섞어서도 사용할 수 있다.
즉 한쪽은 숫자로, 다른 쪽은 컬럼명으로 정렬 조건을 줄 수 있다.

SELECT MOVIE_NAME, GENRE, RATING
FROM MOVIE_INFO
ORDER BY 3 DESC, TICKET_PRICE;

이 쿼리는 먼저 세 번째 컬럼인 RATING으로 내림차순 정렬하고, 같은 값이면 TICKET_PRICE로 다시 정렬한다
가능은 하지만 읽는 사람이 헷갈릴 수 있어서, 웬만하면 한 가지 방식으로 통일하는 게 더 깔끔하다.

✔️ SELECT에서 만든 별칭으로 정렬

ORDER BY는 SELECT보다 나중에 실행되기 때문에 SELECT절에서 만든 별칭도 정렬 기준으로 사용할 수 있다.
WHERE에서는 별칭을 바로 못 쓰는 경우가 많은데, ORDER BY에서는 가능하다.

예시)

SELECT MOVIE_NAME, TICKET_PRICE * 1.1 AS PRICE_WITH_VAT
FROM MOVIE_INFO
ORDER BY PRICE_WITH_VAT DESC;

이 쿼리는 부가세를 포함한 가격을 계산해서 별칭을 붙이고, 그 별칭을 기준으로 내림차순 정렬한 것이다.
따라서 ORDER BY는 출력된 결과를 다루기 때문에 SELECT에서 만든 이름도 정렬 기준으로 사용할 수 있다.

✔️ ORDER BY에서 CASE 문법 사용

ORDER BY에서는 CASE 문법도 사용할 수 있다.
단순 오름차순, 내림차순이 아니라 내가 원하는 우선순위를 직접 정해서 정렬할 때 유용하다.

예시)

SELECT MOVIE_NAME, GENRE, RATING
FROM MOVIE_INFO
ORDER BY CASE GENRE
           WHEN 'SF' THEN 1
           WHEN '액션' THEN 2
           ELSE 3
         END,
         RATING DESC;

이 쿼리는 장르가 SF면 1, 액션이면 2, 나머지는 3으로 바꿔서 정렬 기준을 만든다.
SF를 가장 먼저, 액션을 그다음, 나머지를 마지막으로 두고, 같은 그룹 안에서는 평점 내림차순으로 정렬한다는 뜻이다. 여기서 중요한 점은 CASE 문이 실제 출력값을 바꾸는 것은 아니라는 점이다. 정렬 기준에만 영향을 주고, 결과에 표시되는 GENRE 값은 원래 값 그대로 유지된다.

✔️ ORDER BY에서 NULL 처리

Oracle

오름차순(ASC)일 때 NULL은 가장 뒤에 정렬된다.
내림차순(DESC)일 때 NULL은 가장 앞에 정렬된다.

SQL Server

오름차순(ASC)일 때 NULL은 가장 앞에 정렬된다.
내림차순(DESC)일 때 NULL은 가장 뒤에 정렬된다.

Oracle의 NULLS FIRST / NULLS LAST

Oracle에서는 NULL 정렬 위치를 명시적으로 지정할 수 있다.
이때 사용하는 옵션이 NULLS FIRST, NULLS LAST다.

예시)

SELECT MOVIE_NAME, TICKET_PRICE
FROM MOVIE_INFO
ORDER BY TICKET_PRICE ASC NULLS FIRST;

이 쿼리는 오름차순 정렬을 하되, NULL 값을 가장 위에 두겠다는 의미다. 따라서 Oracle 기본 동작과 다르게 NULL 위치를 직접 조정할 수 있다.

✔️ 핵심 정리

ORDER BY는 조회 결과를 정렬하는 문법이고, SQL 실행 순서상 가장 마지막에 실행된다.

기본 정렬은 ASC, 내림차순은 DESC이며, 여러 컬럼으로 정렬할 때는 앞의 기준부터 순서대로 적용된다. 또 ORDER BY에는 컬럼명뿐 아니라 숫자, 별칭, CASE 문법도 사용할 수 있다.

그리고 NULL 정렬 방식은 DBMS마다 다르므로 Oracle과 SQL Server 차이를 구분해서 기억해야 한다. Oracle에서는 NULLS FIRST, NULLS LAST로 NULL 위치를 직접 지정할 수도 있다.

'📘꼬부기의 성장서재 > 이기적SQLD 기출문제' 카테고리의 다른 글

SQL 표준 조인 정리  (0) 2026.04.02
JOIN  (0) 2026.04.01
GROUP BY, HAVING절  (0) 2026.03.30
WHERE절  (0) 2026.03.29
함수(Function)  (0) 2026.03.28