SQL Server에서 ORDER BY 절은 SELECT 문으로 조회한 결과 집합을 특정 기준에 따라 정렬할 때 사용합니다. 이 절은 SELECT 문 안에서만 사용할 수 있으며, 데이터를 오름차순 또는 내림차순으로 배치해 결과의 가독성을 크게 높여 줍니다.
ORDER BY 절 기본 문법
SELECT 표현식
FROM 테이블
[WHERE 조건]
ORDER BY 표현식 [ASC | DESC];
각 요소의 의미
- 표현식(Expression) – 조회하려는 열(column) 또는 계산된 값입니다.
- 테이블(Table) – 레코드를 가져올 대상 테이블입니다. FROM 절에는 최소 1개의 테이블이 반드시 지정되어야 합니다.
- WHERE 조건 – 선택 사항입니다. 레코드가 선택되기 위해 반드시 충족해야 하는 조건을 의미합니다.
- ASC – 선택 사항입니다. 표현식 값을 기준으로 오름차순(작은 값 → 큰 값)으로 정렬합니다. 별도로 지정하지 않으면 기본값으로 적용됩니다.
- DESC – 선택 사항입니다. 표현식 값을 기준으로 내림차순(큰 값 → 작은 값)으로 정렬합니다.
참고 사항
ORDER BY 절에서 ASC 또는 DESC를 명시하지 않으면 기본적으로 오름차순(ASC)으로 정렬됩니다. 즉, ORDER BY 표현식은 ORDER BY 표현식 ASC와 동일하게 동작합니다.
아래 예제들은 직원 정보를 담은 nhanvien 테이블을 사용하며, ho는 성(last name), ten은 이름(first name) 열을 나타냅니다.
예제 1: ASC / DESC 없이 정렬하기
SELECT *
FROM nhanvien
WHERE nhanvien_id > 1000
ORDER BY ho;
위 쿼리는 직원 ID가 1000보다 큰 레코드를 ho(성) 열을 기준으로 오름차순 정렬하여 반환합니다. 이는 아래 쿼리와 결과가 완전히 같습니다.
SELECT *
FROM nhanvien
WHERE nhanvien_id > 1000
ORDER BY ho ASC;
실무에서는 오름차순 정렬이 기본값이기 때문에 대부분의 개발자가 ASC 키워드를 생략하고 작성합니다.
예제 2: 내림차순 정렬하기
SELECT *
FROM nhanvien
WHERE ten = 'Sarah'
ORDER BY ho DESC;
이름이 'Sarah'인 직원들의 레코드를 ho(성) 열 기준으로 내림차순 정렬하여 반환합니다.
예제 3: 상대 위치로 정렬하기
SQL Server의 ORDER BY 절은 열 이름 대신 결과 집합에서의 상대 위치(순번)를 사용해 정렬할 수도 있습니다. 이때 첫 번째 열은 1, 두 번째 열은 2와 같이 번호가 매겨집니다.
SELECT ho
FROM nhanvien
WHERE ho = 'Anderson'
ORDER BY 1 DESC;
결과 집합에서 ho 열이 첫 번째 위치(1)에 있으므로, 위 쿼리는 아래 쿼리와 동일한 결과를 반환합니다.
SELECT ho
FROM nhanvien
WHERE ho = 'Anderson'
ORDER BY ho DESC;
예제 4: ASC와 DESC 함께 사용하기
SELECT ho, ten
FROM nhanvien
WHERE ho = 'Johnson'
ORDER BY ho DESC, ten ASC;
위 예제에서는 먼저 ho(성)를 내림차순으로 정렬하고, 성이 같은 레코드는 ten(이름)을 오름차순으로 정렬합니다. 이처럼 여러 열을 조합하면 더욱 세밀한 정렬이 가능합니다.
마무리
ORDER BY 절은 하나의 열만 정렬하는 데 그치지 않고, 여러 열을 조합하거나 상대 위치를 활용하는 등 다양한 방식으로 응용할 수 있습니다. "ASC가 지정되지 않으면 항상 오름차순"이라는 기본 규칙만 기억하면, 어떤 상황에서도 원하는 순서대로 데이터를 정확하게 정렬할 수 있습니다.