1. 소개
MySQL은 웹 애플리케이션과 데이터베이스 관리에서 널리 사용되는 관계형 데이터베이스입니다. 그 기능 중 ORDER BY 절은 특정 기준에 따라 검색된 데이터를 정렬하는 데 필수적인 기능입니다. 이 기사에서는 ORDER BY 절의 기본 사용법부터 여러 열로 정렬하기, NULL 값 처리, 성능 최적화에 이르기까지 자세히 설명하겠습니다. 실제 데이터 작업을 시각적으로 더 쉽게 이해할 수 있도록 구체적인 예제와 다이어그램도 제공하겠습니다.
2. ORDER BY 절의 기본 구문
ORDER BY 절은 데이터베이스에서 검색된 데이터를 오름차순(ASC) 또는 내림차순(DESC)으로 정렬하는 데 사용됩니다. 정렬할 열을 지정함으로써 데이터를 더 체계적이고 구조화된 방식으로 표시할 수 있습니다.
기본 구문
SELECT * FROM table_name
ORDER BY column_name ASC | DESC;
- 오름차순 (ASC) : 작은 값부터 큰 값으로 정렬합니다.
ASC를 지정하지 않으면 오름차순이 기본 동작입니다. - 내림차순 (DESC) : 큰 값부터 작은 값으로 정렬합니다.
예제
다음 쿼리는 고객을 나이 기준으로 오름차순 정렬합니다.
SELECT * FROM customers
ORDER BY age ASC;
그림 1: 정렬 전 고객 데이터
| Name | Age | Address |
|---|---|---|
| Yamada | 40 | Tokyo |
| Sato | 25 | Osaka |
| Suzuki | 35 | Nagoya |
그림 2: 정렬 후 고객 데이터
| Name | Age | Address |
|---|---|---|
| Sato | 25 | Osaka |
| Suzuki | 35 | Nagoya |
| Yamada | 40 | Tokyo |
중요 사항
ORDER BY 절은 SELECT 문의 끝에 작성해야 합니다. 다른 절(예: WHERE 또는 GROUP BY)이 있는 경우, ORDER BY는 그 후에 배치해야 합니다.
3. 여러 열로 정렬하기
ORDER BY 절을 사용하면 여러 열을 지정하여 정렬할 수 있습니다. 이를 통해 데이터를 더 세부적으로 구성할 수 있습니다. 예를 들어, 첫 번째 열로 정렬한 후 중복 값이 있으면 두 번째 열을 사용하여 순서를 결정합니다.
구문 예제
SELECT * FROM table_name
ORDER BY column1 ASC, column2 DESC;
실전 예제
다음 쿼리는 레코드를 주소 내림차순으로, 나이 오름차순으로 정렬합니다.
SELECT * FROM customers
ORDER BY address DESC, age ASC;
그림 3: 정렬 결과 (여러 열)
| Name | Address | Age |
|---|---|---|
| Yamada | Tokyo | 40 |
| Sato | Osaka | 25 |
| Suzuki | Nagoya | 35 |
이렇게 하면 레코드는 먼저 주소(address) 내림차순으로 정렬됩니다. 여러 고객이 동일한 주소를 공유하는 경우, 나이(age) 오름차순으로 정렬됩니다.
4. NULL 값 처리
SQL에서 NULL 값은 값이 존재하지 않음을 나타냅니다. ORDER BY 절을 사용할 때 NULL 값은 특별한 처리를 받습니다. ASC를 지정하면 NULL 값이 먼저 나타나고, DESC를 지정하면 마지막에 나타납니다.
NULL 값의 동작
- 오름차순 (ASC) :
NULL값이 먼저 나타납니다. - 내림차순 (DESC) :
NULL값이 마지막에 나타납니다.
예제
다음 쿼리는 NULL 가격의 제품을 먼저 표시한 후, 다른 제품을 오름차순으로 정렬합니다.
SELECT * FROM products
ORDER BY price ASC;
그림 4: NULL 값을 포함한 정렬 결과
| Product Name | Price |
|---|---|
| Product A | NULL |
| Product B | 1000 |
| Product C | 2000 |
NULL 값을 마지막에 표시하는 방법
NULL 값을 끝에 표시하려면 ISNULL() 함수를 사용하세요.
SELECT * FROM products
ORDER BY ISNULL(price), price ASC;

5. WHERE 절과 결합하기
WHERE 절과 ORDER BY 절을 결합하면 특정 조건에 맞는 데이터를 추출한 후 필터링된 결과를 정렬할 수 있습니다. 이를 통해 데이터를 효율적으로 구성하고 표시할 수 있습니다.
기본 구문
SELECT * FROM table_name
WHERE condition
ORDER BY column_name ASC | DESC;
예제
다음 쿼리는 30세 이상 고객을 이름 오름차순으로 정렬합니다.
SELECT * FROM customers
WHERE age >= 30
ORDER BY name ASC;
이 쿼리는 필터링된 데이터에 정렬을 적용하는 것을 보여줍니다.
6. GROUP BY와 함께 사용하기
GROUP BY 절은 데이터를 특정 열로 그룹화하며, ORDER BY 절을 사용하여 그룹화된 결과를 정렬할 수 있습니다.
answer.### 예시
다음 쿼리는 지역별 고객 수를 내림차순으로 정렬합니다.
SELECT region, COUNT(*)
FROM customers
GROUP BY region
ORDER BY COUNT(*) DESC;
그림 5: 정렬된 집계 결과
| Region | Number of Customers |
|---|---|
| Tokyo | 50 |
| Osaka | 30 |
| Nagoya | 20 |
7. ORDER BY 고급 사용법: 날짜 및 문자열 정렬
ORDER BY 절은 날짜 및 문자열 열에도 사용할 수 있습니다. 예를 들어, 최신 데이터를 먼저 표시하거나 레코드를 알파벳 순으로 정렬할 때 유용합니다.
날짜별 정렬
SELECT * FROM orders
ORDER BY order_date DESC;
이 쿼리는 데이터를 정렬하여 가장 최근 주문이 먼저 표시되도록 합니다.
문자열별 정렬
다음 쿼리는 name 열을 알파벳 순으로 정렬합니다.
SELECT * FROM employees
ORDER BY name ASC;
8. ORDER BY 절 성능 최적화
대량의 데이터를 정렬하면 성능에 영향을 줄 수 있습니다. ORDER BY 절을 사용할 때 성능을 향상시키는 몇 가지 기술을 소개합니다.
인덱스 사용
정렬에 사용되는 열에 인덱스를 추가하면 쿼리 성능을 크게 향상시킬 수 있습니다.
CREATE INDEX idx_column_name ON table_name(column_name);
LIMIT 절 사용
정렬 후 반환되는 행 수를 제한하려면 LIMIT 절을 사용할 수 있습니다. 이는 실행 속도를 높이고 처리 비용을 줄여줍니다.
SELECT * FROM customers
ORDER BY age ASC
LIMIT 10;
대용량 데이터 세트 처리
대용량 데이터 세트를 효율적으로 정렬하려면 MySQL 설정을 조정하는 것도 중요합니다. 예를 들어, sort_buffer_size 값을 늘리면 정렬 중 메모리 할당량이 증가하여 처리 속도를 개선할 수 있습니다.
SET GLOBAL sort_buffer_size = 2M;
또한, EXPLAIN을 사용하여 쿼리 실행 계획을 검토하고 잠재적인 최적화 기회를 파악하는 것이 중요합니다.
EXPLAIN SELECT * FROM customers ORDER BY age ASC;
9. 결론
이 글에서는 MySQL ORDER BY 절의 기본 개념부터 고급 활용까지 자세히 설명했습니다. ORDER BY 절은 데이터를 명확하게 정리하고 표시하는 데 필수적인 기능이며, 오름차순·내림차순 지정, 다중 열 정렬, NULL 값 처리 등 다양한 상황을 지원합니다.
또한 성능 최적화 기법을 다루고 대용량 데이터 세트를 다룰 때 효율성을 높이는 방법을 설명했습니다. 인덱스를 활용하고 LIMIT 절을 사용하며 sort_buffer_size를 조정하면 정렬 작업을 크게 가속화할 수 있습니다.
MySQL ORDER BY 절을 마스터하면 데이터를 효율적으로 정렬하고 애플리케이션 및 데이터베이스의 성능을 향상시킬 수 있습니다. 이 글에서 소개한 기술을 실제 개발 작업에 꼭 적용해 보세요.
실용적인 ORDER BY 사용 시나리오
마지막으로, ORDER BY가 자주 사용되는 일반적인 실제 시나리오를 소개합니다.
- 보고서 생성 : 예를 들어, 매출 보고서를 만들 때 제품을 매출액 순으로 정렬하거나 지역별 매출 실적을 정렬된 형태로 표시할 수 있습니다. 이러한 경우
ORDER BY절은 필수적입니다. - 페이지네이션 구현 : 웹 애플리케이션에서 데이터를 페이지별로 표시할 때
ORDER BY와LIMIT를 결합하면 데이터를 올바르게 정렬된 상태로 유지하면서 효율적으로 페이지네이션을 구현할 수 있습니다. - 데이터베이스 정리 작업 : 오래된 레코드를 삭제하거나 특정 조건에 맞는 데이터를 추출·조작할 때
ORDER BY를 사용하면 대상 데이터를 더 쉽게 찾고 관리할 수 있습니다.
이러한 시나리오는 일상 업무에서 흔히 마주칩니다. ORDER BY 절을 효과적으로 활용하면 작업 흐름 효율성을 크게 향상시킬 수 있습니다.


