반응형
MySQL에서 데이터를 조회할 때, 순서를 지정하지 않으면 레코드는 임의의 순서로 반환된다.
하지만 실무에서는 날짜순, 이름순, 가격순 등 특정 기준으로 정렬된 결과가 필요한 경우가 매우 많다.

📌 ORDER BY 기본 문법
SELECT 컬럼명 FROM 테이블명
ORDER BY 정렬할_컬럼명 [ASC | DESC];
- ASC (오름차순) – 기본값
- DESC (내림차순)
예시:
SELECT * FROM users ORDER BY age ASC;
- users 테이블의 데이터를 나이 순으로 오름차순 정렬하여 출력한다
SELECT * FROM users ORDER BY age DESC;
- 나이가 많은 순서대로 정렬된다
반응형
🎯 여러 개의 컬럼으로 정렬하기
MySQL에서는 두 개 이상의 컬럼 기준으로도 정렬할 수 있다.
SELECT * FROM users
ORDER BY city ASC, age DESC;
- city 기준으로 오름차순 정렬한 뒤, 같은 도시 내에서는 age 기준으로 내림차순 정렬
이 방식은 복합 정렬이라 하며, 실무에서는 회원 관리, 제품 정렬, 주문 목록 등에서 매우 자주 사용된다.
🔍 정렬 + 조건절 WHERE 함께 쓰기
정렬만 하는 것이 아니라 특정 조건을 함께 걸 수도 있다.
SELECT name, age FROM users
WHERE age > 25
ORDER BY age DESC;
- 25세 초과 사용자 중 나이가 많은 순으로 정렬된 결과
📊 정렬 + LIMIT 함께 사용하기
MySQL의 ORDER BY는 LIMIT과 함께 쓰면 가장 강력한 기능 중 하나가 된다.
대표적인 예는 인기 게시물 10개, 최근 등록된 5개 상품 등을 조회하는 쿼리다.
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10;
- 최근 등록된 상품 10개만 출력
SELECT * FROM products
ORDER BY views DESC
LIMIT 5;
- 조회수가 높은 순서대로 상위 5개 상품만 출력
반응형
🧪 실전 예제 – 회원 테이블 정렬
CREATE TABLE members (
id INT PRIMARY KEY,
name VARCHAR(50),
level INT,
joined_at DATE
);
INSERT INTO members (id, name, level, joined_at) VALUES
(1, '홍길동', 3, '2024-03-01'),
(2, '이영희', 2, '2024-01-15'),
(3, '박철수', 5, '2024-05-05'),
(4, '최지은', 4, '2024-02-20');
SELECT * FROM members ORDER BY level DESC;
- 회원 등급(level)이 높은 순으로 정렬
SELECT * FROM members ORDER BY joined_at ASC;
- 가입일 순으로 오래된 회원부터 정렬
🧠 ORDER BY와 인덱스
ORDER BY는 때때로 성능 저하의 원인이 되기도 한다.
정렬 기준 컬럼에 인덱스가 없다면, MySQL은 전 데이터를 메모리에 올려 정렬한다.
데이터 양이 많을수록 속도가 느려지기 때문에,
자주 정렬하는 컬럼에는 인덱스를 고려하는 것이 좋다.
예:
CREATE INDEX idx_users_age ON users(age);
반응형
🧰 정렬 컬럼에 함수 적용하기
SELECT * FROM orders
ORDER BY DATE(created_at) DESC;
- 날짜만 기준으로 내림차순 정렬
- 함수가 사용되면 인덱스가 무시되므로 속도에 주의
✅ 정리하자면…
- ORDER BY는 데이터를 정렬할 때 사용하는 SQL 문법이다
- ASC, DESC로 정렬 방향을 지정할 수 있다
- 두 개 이상의 컬럼 기준으로 정렬할 수 있다
- LIMIT과 함께 사용하면 페이징 또는 인기 순 정렬에 매우 유용하다
- 성능 최적화를 위해 인덱스와 함께 고려하는 것이 좋다
📎 공식 문서 참고
MySQL ORDER BY 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/select.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] SELECT + COUNT, SUM, AVG, MAX, MIN 집계 함수 완전 정복 (0) | 2025.06.25 |
|---|---|
| [MySQL] SELECT DISTINCT – 중복된 데이터 없이 깔끔하게 조회하는 법 (0) | 2025.06.25 |
| [MySQL] SELECT LIMIT / OFFSET (행의 개수 제한 / 페이징 처리) (0) | 2025.06.24 |
| [MySQL] SELECT GROUP BY + HAVING (그룹화와 조건 필터링) (0) | 2025.06.24 |
| [MySQL] SELECT WHERE 조건절 완벽 정리 (1) | 2025.06.24 |
| [MySQL] SELECT 기본 조회 방법 완벽 정리 (0) | 2025.06.24 |
| [MySQL] 대량 INSERT 성능 최적화 방법 완벽 정리 (1) | 2025.06.20 |
| [MySQL] REPLACE VS INSERT 차이점 완벽 정리 (0) | 2025.06.20 |