메뉴 닫기

MSSQL ORDER BY 사용법, ASC와 DESC로 정렬하는 방법

MSSQL ORDER BY 사용법, ASC와 DESC로 정렬하는 방법

📌 SQL 데이터 정렬의 핵심, ORDER BY로 원하는 순서대로 결과를 표시하세요

데이터베이스에서 원하는 정보를 정확히 찾았더라도, 그 결과가 뒤죽박죽 섞여 있다면 활용하기가 쉽지 않습니다.
특히 수백, 수천 건의 데이터를 다룰 때는 정렬이 필수죠.
이럴 때 유용하게 쓰이는 기능이 바로 ORDER BY입니다.
이 구문은 MSSQL뿐 아니라 대부분의 관계형 데이터베이스에서 사용되며, 컬럼을 기준으로 결과를 오름차순(ASC)이나 내림차순(DESC)으로 손쉽게 정렬할 수 있습니다.
이번 글에서는 초보자도 이해하기 쉽게 ORDER BY의 기본 문법과 실무에서 자주 쓰이는 예제를 함께 살펴보겠습니다.

정렬은 단순히 보기 좋게 만드는 것 이상의 의미를 가집니다.
예를 들어 매출 데이터를 내림차순으로 정렬하면 가장 높은 매출부터 확인할 수 있고, 날짜순으로 정렬하면 최신 데이터나 오래된 데이터를 빠르게 파악할 수 있죠.
또한 여러 개의 컬럼을 동시에 정렬하여 더욱 정교한 데이터 분석이 가능합니다.
이 글에서는 MSSQL의 ORDER BY 사용법을 기본부터 심화까지 체계적으로 정리하여, 실무에 바로 적용할 수 있는 팁을 제공합니다.



🔗 ORDER BY란?

ORDER BY는 SQL에서 쿼리 결과를 특정 기준에 따라 정렬하는 구문입니다.
MSSQL을 포함한 대부분의 관계형 데이터베이스에서 지원하며, 데이터 조회 시 마지막에 위치합니다.
즉, SELECT 구문으로 데이터를 가져온 뒤 ORDER BY 절을 사용해 원하는 순서대로 재배열할 수 있습니다.
이 기능은 단순히 보기 좋게 만드는 것이 아니라, 분석, 리포트 작성, 데이터 검증 등 다양한 상황에서 핵심적인 역할을 합니다.

기본 문법은 다음과 같습니다.

CODE BLOCK
SELECT 컬럼명1, 컬럼명2, ...
FROM 테이블명
ORDER BY 컬럼명 ASC | DESC;

여기서 ASC는 오름차순(기본값), DESC는 내림차순을 의미합니다.
만약 ASC/DESC를 생략하면 기본적으로 오름차순으로 정렬됩니다.
또한 하나 이상의 컬럼을 기준으로 정렬할 수 있어 복잡한 데이터셋에서도 효과적으로 사용할 수 있습니다.

💡 TIP: ORDER BY는 SELECT로 가져온 결과에만 적용되므로, WHERE 절로 먼저 필터링한 뒤 ORDER BY를 사용하는 것이 일반적입니다.

예를 들어, 판매 데이터에서 최근 판매일 기준으로 내림차순 정렬하면 최신 거래 내역을 가장 먼저 확인할 수 있습니다.
반대로 가격을 오름차순으로 정렬하면 저렴한 상품부터 쉽게 찾을 수 있죠.
이처럼 ORDER BY는 분석 목표에 맞게 데이터를 원하는 순서로 재배치하는 핵심 도구입니다.

🛠️ ASC와 DESC의 차이

ORDER BY에서 사용하는 ASCDESC는 정렬 방향을 지정하는 키워드입니다.
ASC는 오름차순(Ascending) 정렬로, 값이 작은 것부터 큰 것 순서로 나열됩니다.
DESC는 내림차순(Descending) 정렬로, 값이 큰 것부터 작은 순서로 표시됩니다.
숫자, 문자열, 날짜 등 다양한 데이터 유형에 적용 가능하며, 상황에 맞게 선택하면 됩니다.

📌 ASC 오름차순 정렬

오름차순 정렬은 기본 정렬 방식이며, 가장 작은 값에서 가장 큰 값 순으로 데이터를 배열합니다.
숫자는 1, 2, 3 순서로, 날짜는 오래된 날짜부터 최근 날짜 순으로, 문자열은 알파벳 또는 한글 자음순으로 정렬됩니다.
ASC는 생략해도 기본적으로 적용됩니다.

CODE BLOCK
SELECT 이름, 가격
FROM 상품목록
ORDER BY 가격 ASC;

📌 DESC 내림차순 정렬

내림차순 정렬은 값이 큰 것부터 작은 것 순서로 나열합니다.
매출 순위, 점수 순위, 최신 날짜 확인 등에서 자주 사용됩니다.
DESC는 반드시 명시해야 하며, 생략 시 오름차순으로 처리됩니다.

CODE BLOCK
SELECT 이름, 점수
FROM 시험결과
ORDER BY 점수 DESC;

💡 TIP: DESC로 정렬한 뒤 TOP 절과 함께 사용하면 상위 N개의 데이터만 쉽게 추출할 수 있습니다.



⚙️ 여러 컬럼 정렬 방법

ORDER BY는 하나의 컬럼뿐 아니라 여러 개의 컬럼을 기준으로 정렬할 수 있습니다.
이를 다중 정렬이라고 하며, 첫 번째 컬럼을 기준으로 우선 정렬한 뒤, 동일한 값에 대해서만 두 번째 컬럼 기준으로 다시 정렬합니다.
이 방식을 사용하면 더 세밀하게 데이터 순서를 제어할 수 있습니다.

📌 다중 정렬 기본 문법

CODE BLOCK
SELECT 부서, 이름, 급여
FROM 직원목록
ORDER BY 부서 ASC, 급여 DESC;

위 예제는 먼저 부서명을 오름차순으로 정렬한 후, 같은 부서 내에서는 급여가 높은 순으로 정렬합니다.
이처럼 ASC와 DESC를 컬럼마다 독립적으로 지정할 수 있습니다.

📌 다중 정렬 활용 예시

  • 🛠️상품 분류별로 정렬 후, 같은 분류 내에서 가격이 낮은 순으로 정렬
  • ⚙️학생 성적을 반별로 정렬 후, 반 내에서 점수가 높은 순으로 정렬
  • 🔌영업 데이터를 지역별로 정렬 후, 지역 내 매출이 높은 순으로 정렬

⚠️ 주의: 다중 정렬 시 첫 번째 컬럼의 정렬 결과가 전체 순서를 크게 좌우하므로, 가장 중요한 기준 컬럼을 먼저 지정해야 합니다.

🔌 NULL 값 정렬 처리

ORDER BY를 사용할 때, NULL 값이 포함된 컬럼이 있다면 정렬 순서에서 특별히 고려해야 할 점이 있습니다.
MSSQL에서는 NULL이 가장 작은 값으로 취급되어 오름차순 정렬 시 맨 앞에, 내림차순 정렬 시 맨 뒤에 위치하게 됩니다.
하지만 비즈니스 로직상 NULL을 뒤로 보내거나 앞으로 보내야 하는 경우가 있을 수 있습니다.

📌 NULL 처리 기본 동작

기본적으로 MSSQL에서 NULL은 값이 없음을 의미하며, 비교 연산 시에도 주의가 필요합니다.
정렬 시에는 ASC일 경우 NULL이 먼저, DESC일 경우 NULL이 마지막에 옵니다.

CODE BLOCK
SELECT 이름, 가입일
FROM 회원목록
ORDER BY 가입일 ASC;

📌 NULL을 원하는 위치로 이동

CASE 문을 활용하면 NULL 값을 원하는 순서로 배치할 수 있습니다.
예를 들어, 오름차순 정렬 시 NULL을 맨 뒤로 보내고 싶다면 다음과 같이 작성합니다.

CODE BLOCK
SELECT 이름, 가입일
FROM 회원목록
ORDER BY CASE WHEN 가입일 IS NULL THEN 1 ELSE 0 END, 가입일 ASC;

💎 핵심 포인트:
MSSQL에서는 MySQL처럼 NULLS FIRST, NULLS LAST 구문을 지원하지 않으므로 CASE 문 또는 ISNULL/COALESCE 함수를 이용한 우회 방식이 필요합니다.



💡 실무 예제와 활용 팁

ORDER BY 구문은 단순히 데이터를 보기 좋게 정렬하는 데 그치지 않고, 실무 환경에서 데이터 분석과 보고서 작성에 필수적으로 활용됩니다.
아래는 MSSQL 환경에서 자주 쓰이는 ORDER BY 활용 예제와 함께 효율적인 사용 팁을 정리했습니다.

📌 TOP 절과 함께 사용

ORDER BY와 TOP 절을 함께 사용하면 상위 또는 하위 N개의 데이터만 빠르게 조회할 수 있습니다.
예를 들어, 매출 상위 5개 제품을 조회하려면 다음과 같이 작성합니다.

CODE BLOCK
SELECT TOP 5 제품명, 매출
FROM 판매현황
ORDER BY 매출 DESC;

📌 OFFSET-FETCH로 페이징 처리

MSSQL 2012 이후 버전에서는 OFFSET-FETCH 절을 사용해 페이지네이션을 구현할 수 있습니다.
이 방식은 웹 애플리케이션에서 데이터 목록을 페이지 단위로 표시할 때 유용합니다.

CODE BLOCK
SELECT 제품명, 가격
FROM 상품목록
ORDER BY 가격 ASC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;

💡 TIP: OFFSET-FETCH를 사용할 때는 반드시 ORDER BY 절이 포함되어야 하며, 정렬 기준이 없는 경우 결과 순서가 불규칙해질 수 있습니다.

📌 ISNULL/COALESCE로 NULL 처리

NULL 값이 많은 컬럼을 정렬할 때 ISNULL 또는 COALESCE 함수를 사용하면 기본값을 지정해 정렬 순서를 제어할 수 있습니다.

CODE BLOCK
SELECT 이름, ISNULL(가입일, '1900-01-01') AS 가입일
FROM 회원목록
ORDER BY 가입일 ASC;

자주 묻는 질문 (FAQ)

ORDER BY를 사용할 때 ASC와 DESC를 생략하면 어떻게 되나요?
ASC가 기본값으로 적용되어 오름차순 정렬이 됩니다.
ORDER BY에서 여러 컬럼을 동시에 정렬할 수 있나요?
네, 쉼표로 구분하여 다중 정렬이 가능합니다. 각 컬럼마다 ASC나 DESC를 독립적으로 지정할 수 있습니다.
NULL 값은 정렬 시 어디에 위치하나요?
MSSQL에서는 ASC 시 NULL이 먼저, DESC 시 NULL이 마지막에 위치합니다.
NULL 값을 정렬에서 원하는 위치로 이동시키려면 어떻게 하나요?
CASE 문 또는 ISNULL/COALESCE 함수를 사용하여 NULL의 위치를 조정할 수 있습니다.
TOP 절과 ORDER BY를 함께 사용하면 어떤 장점이 있나요?
원하는 기준으로 정렬한 뒤 상위 또는 하위 N개의 데이터만 빠르게 조회할 수 있어 성능과 효율성이 높아집니다.
OFFSET-FETCH 절은 어떤 경우에 사용하나요?
페이지네이션 구현 시 특정 범위의 데이터만 가져오기 위해 사용합니다.
ORDER BY 없이 SELECT만 사용하면 결과 순서는 어떻게 되나요?
데이터베이스 내부 처리 순서에 따라 무작위처럼 보일 수 있으며, 항상 일정한 순서를 보장하지 않습니다.
ORDER BY에서 컬럼 번호를 사용할 수 있나요?
네, SELECT 절에 지정한 컬럼의 순서 번호를 사용할 수 있지만, 가독성과 유지보수를 위해 컬럼명을 직접 사용하는 것을 권장합니다.

📌 ORDER BY로 데이터 정렬을 더 효율적으로

MSSQL에서 ORDER BY 구문은 데이터를 원하는 순서대로 재배치해 가독성과 분석 효율성을 높여줍니다.
ASC와 DESC를 활용하면 간단한 정렬부터 복잡한 다중 정렬까지 유연하게 처리할 수 있으며, NULL 값 처리, TOP 절, OFFSET-FETCH 등과 조합하면 실무 환경에서 강력한 데이터 출력 제어가 가능합니다.
또한 ISNULL, COALESCE, CASE 문 등을 이용하면 정렬 로직을 세밀하게 설계할 수 있어 비즈니스 요구에 맞는 맞춤형 데이터 제공이 가능합니다.
정렬 기준을 명확히 정의하고 쿼리를 작성하면, 보고서 작성, 데이터 분석, 웹 서비스 응답 속도 개선 등 다양한 영역에서 효율을 극대화할 수 있습니다.


🏷️ 관련 태그 : MSSQL, ORDERBY, ASC정렬, DESC정렬, 다중정렬, NULL정렬, SQL문법, 데이터분석, TOP절, OFFSETFETCH