DB

[MySQL] SELECT ORDER BY 정렬 방법 완벽 정리

인생아 2025. 6. 24. 14:38
반응형

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

반응형