ORDER BY와 LIMIT 사용법 완벽 정리
: 정렬과 데이터 추출의 핵심
여러분, SQL에서 데이터를
"예쁘게" 정렬하고,
필요한 "딱 몇 개"만 뽑아내고 싶었던 적 없으셨나요?
이 두 가지, 생각보다 엄청 자주 쓰입니다!
안녕하세요, 데이터베이스를 배우는 우리 초보 개발자 여러분!
오늘은 SQL 쿼리 중에서도 실무에서 정말 자주 쓰이는 핵심 문법 두 가지, ORDER BY와 LIMIT에 대해 자세히 알아보려 해요.
게시판 글을 최신순으로 정렬한다든지, 인기 상품 상위 10개만 뽑는다든지 하는 아주 흔한 상황에서 이 문법들이 사용됩니다.
실제 실습 예제도 준비했으니, 끝까지 따라오시면 확실히 익히실 수 있어요.
그럼 지금 바로 시작해볼까요? 😎
목차
1. ORDER BY 기본 개념 🧭
SQL에서 데이터를 조회할 때, 무작위로 나열된 결과는 종종 불편하죠.
예를 들어 게시판에서 최근 글이 위에 뜨지 않는다면 얼마나 불편할까요?
그래서 등장한 게 바로 ORDER BY 구문입니다.
ORDER BY는 조회한 데이터 결과를 정렬할 수 있게 해주는 구문이에요.
기본적으로 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 수 있어요.
기본 문법 구조
SELECT * FROM 테이블명
ORDER BY 컬럼명 [ASC | DESC];
✔ 예시로 이해하기
SELECT * FROM posts
ORDER BY created_at DESC;
위 쿼리는 posts라는 테이블에서 데이터를 조회하면서 created_at 컬럼 기준으로 내림차순(DESC),
즉 가장 최신 글부터 정렬하는 예입니다.
ORDER BY를 쓸 때 꼭 알아야 할 3가지
- 기본 정렬은 오름차순(ASC)이며, 생략하면 ASC가 기본값입니다.
- 여러 개의 컬럼을 쉼표로 나열하면 순차적으로 정렬됩니다.
- NULL 값은 보통 가장 뒤로 정렬되지만 DB에 따라 다를 수 있어요.
📝 TIP: 컬럼 별칭으로도 정렬 가능해요!
SELECT id, title, created_at AS date
FROM posts
ORDER BY date DESC;
AS
로 만든 별칭(date
)으로도 ORDER BY
를 사용할 수 있어요. 보기 편한 이름으로 바꾸면 유지보수에도 좋습니다.
정리 테이블 🧩
문법 | 설명 | 예시 |
---|---|---|
ORDER BY 컬럼명 ASC |
오름차순 정렬 | 나이 적은 순서, 등록일 빠른 순 |
ORDER BY 컬럼명 DESC |
내림차순 정렬 | 최근 글 순, 점수 높은 순 |
2. 최신순 vs 오래된순 정렬 실습 📅
정렬의 진짜 실전은 바로 여기서 시작돼요.
우리는 게시판에서 글을 볼 때 최신글이 위로 올라오길 기대하죠.
반대로, 글 작성 순서대로 오래된 글부터 보고 싶을 때도 있어요.
이럴 때 사용하는 게 ORDER BY created_at DESC / ASC입니다.
🧪 실습 1: 게시판 글을 최신순으로 정렬
SELECT id, title, created_at
FROM board
ORDER BY created_at DESC;
위 쿼리는 board
테이블에서 글 목록을 조회하면서 created_at
을 기준으로 최신순(DESC)으로 정렬합니다. 게시판처럼 최신글을 위에 보여주는 경우에 딱입니다.
🧪 실습 2: 게시판 글을 오래된 순으로 정렬
SELECT id, title, created_at
FROM board
ORDER BY created_at ASC;
이번에는 ASC를 사용해서 오래된 순서로 정렬했어요. 일반적으로 고객 문의 내역, 댓글 기록 등 처음부터 순서대로 보여줘야 하는 경우에 활용됩니다.
📋 DESC vs ASC 비교 테이블
옵션 | 의미 | 사용 예시 |
---|---|---|
DESC | 내림차순 (큰 값 → 작은 값) | 최신 게시글, 점수 높은 순, 가격 높은 순 |
ASC | 오름차순 (작은 값 → 큰 값) | 오래된 게시글, 점수 낮은 순, 가격 낮은 순 |
💡 정렬 기준이 숫자일 경우
숫자 컬럼도 똑같이 ORDER BY
에 사용 가능합니다.
예를 들어 조회수 높은 글부터 보고 싶다면 ORDER BY view_count DESC
처럼 쓰면 됩니다.
3. LIMIT으로 원하는 개수만 추출하기 🎯
SQL로 데이터를 조회할 때, 모든 데이터를 다 가져올 필요는 없죠.
게시판에서 상위 5개 글만, 인기 상품 중 상위 10개만 보여주고 싶을 때도 있어요.
이럴 때 LIMIT 구문을 사용합니다.
LIMIT은 말 그대로 가져올 행(Row)의 수를 제한하는 역할을 해요.
특히 데이터가 많은 테이블에서 쿼리 성능을 올릴 때도 유용하죠.
기본 문법 구조
SELECT 컬럼명 FROM 테이블명
LIMIT 개수;
예를 들어 최근 등록된 글 5개만 보고 싶다면 이렇게 쓸 수 있어요:
SELECT * FROM board
ORDER BY created_at DESC
LIMIT 5;
여기서 ORDER BY와 LIMIT을 같이 쓴 게 핵심이에요.
정렬 먼저 한 다음, 위에서부터 5개만 보여주는 거죠.
LIMIT과 OFFSET 같이 쓰기
OFFSET은 LIMIT과 함께 쓰이면 몇 번째 행부터 보여줄지 정할 수 있어요.
페이지네이션(Pagination)에서 자주 사용됩니다.
SELECT * FROM board
ORDER BY created_at DESC
LIMIT 5 OFFSET 5;
위 쿼리는 6번째부터 5개의 데이터를 보여줍니다.
즉, 첫 페이지가 LIMIT 5, 두 번째 페이지는 OFFSET 5, LIMIT 5 이렇게 되는 구조죠.
LIMIT 사용 시 주의사항 🔍
- 정렬 없이 LIMIT만 쓰면, 어떤 기준으로 잘렸는지 예측 불가예요.
- OFFSET은 데이터가 많아질수록 성능에 영향이 큽니다. 인덱스 최적화 고려해야 해요.
- LIMIT만 단독으로 쓰면 랜덤 정렬처럼 보여질 수 있어요.
ORDER BY
는 필수로 붙여주세요!
💡 예시 테이블 요약
쿼리 | 설명 |
---|---|
LIMIT 10 |
앞에서 10개만 가져옴 |
LIMIT 5 OFFSET 10 |
11번째부터 5개 가져옴 |
ORDER BY price DESC LIMIT 3 |
가격 높은 순으로 3개 상품 추출 |
4. 상위 10개 상품 추출 실습 🛒
이번에는 실무에서 정말 자주 나오는 실습을 해볼게요!
예를 들어 쇼핑몰이나 포털에서 "인기 상품 TOP 10" 목록을 보여줘야 할 때 어떻게 할까요?
바로 ORDER BY
와 LIMIT
의 조합이 필요한 순간입니다.
📊 실습: 판매량 기준 상위 10개 상품 조회
SELECT id, product_name, sales_count
FROM products
ORDER BY sales_count DESC
LIMIT 10;
이 쿼리는 products
테이블에서 sales_count가 많은 순서대로 상위 10개 상품을 추출합니다.
마케팅 페이지나 홈화면 인기 상품 영역에 쓰기 딱 좋은 쿼리죠!
🎯 실전 팁: 다양한 기준으로 정렬할 수 있어요
- 별점 높은 순:
ORDER BY rating DESC
- 가격 낮은 순:
ORDER BY price ASC
- 리뷰 수 기준 정렬:
ORDER BY review_count DESC
📋 다양한 정렬 조합 예시 테이블
쿼리 | 설명 |
---|---|
ORDER BY price DESC LIMIT 10 |
가장 비싼 상품 10개 |
ORDER BY created_at DESC LIMIT 10 |
최근 등록된 상품 10개 |
ORDER BY rating DESC LIMIT 10 |
별점이 가장 높은 TOP10 |
⚠️ 순위 정보가 필요할 땐?
MySQL 기준으로는 ROW_NUMBER()
나 RANK()
같은 윈도우 함수와 함께 LIMIT을 쓰면 순위 기반 추천 시스템도 구현할 수 있습니다.
5. ORDER BY와 LIMIT 함께 쓰기 꿀팁 🧪
지금까지 배운 ORDER BY와 LIMIT을 제대로 쓰기 위해선 둘을 같이 사용하는 패턴에 익숙해져야 합니다.
생각보다 조합이 중요하거든요!
📐 패턴 1: 정렬 후 제한
SELECT * FROM posts
ORDER BY created_at DESC
LIMIT 5;
이 패턴은 정렬이 먼저, 제한은 그 다음이에요.
최신순으로 정렬된 결과에서 상위 5개만 가져오는 방식이죠.
실무에선 이 구조가 기본이에요!
🧭 패턴 2: 여러 컬럼 정렬 + LIMIT
SELECT * FROM products
ORDER BY category ASC, sales_count DESC
LIMIT 10;
카테고리별로 정렬한 뒤, 각 카테고리 내에서 판매량 높은 순으로 정렬한 결과 중 상위 10개를 출력하는 예시입니다.
복합 정렬에도 LIMIT은 잘 작동합니다!
💡 만약 정렬을 생략한다면?
LIMIT만 사용하면 데이터베이스 엔진의 내부 처리 순서에 따라 무작위처럼 보이는 결과를 보여줄 수 있어요.
이건 매우 위험합니다.
정렬 없이 LIMIT 쓰는 건 금물!
📋 ORDER BY + LIMIT 활용 예시 모음
목적 | SQL 예시 |
---|---|
최신 게시글 3개 | ORDER BY created_at DESC LIMIT 3 |
조회수 높은 글 1개 | ORDER BY views DESC LIMIT 1 |
카테고리별 인기 상품 상위 5개 | ORDER BY category, sales DESC LIMIT 5 |
🎁 보너스 팁: LIMIT 없이 정렬만 할 수도 있어요
꼭 LIMIT을 써야 하는 건 아니에요.
ORDER BY
만으로도 결과를 보기 좋게 정렬할 수 있답니다.
하지만 화면에 딱 필요한 수만 보여주려면 LIMIT은 필수죠!
6. 실수하기 쉬운 포인트와 정리 ✍️
ORDER BY와 LIMIT은 간단해 보이지만, 초보자들이 자주 실수하는 포인트도 많아요.
특히 정렬 기준 없이 LIMIT만 쓰거나, 컬럼 타입을 착각해서 엉뚱한 결과를 얻는 경우도 많습니다.
여기에서 중요한 부분을 다시 정리해볼게요!
❌ 자주 하는 실수
- 정렬 없이
LIMIT
만 사용 → 결과가 매번 달라질 수 있어요! -
ORDER BY
할 때 컬럼명이 잘못되면 오류 발생 → 오타 조심! -
OFFSET
을 너무 크게 주면 성능 저하 → 페이징 처리 최적화 필요
📌 핵심 요약
- ORDER BY는 정렬 기준을 지정할 때 사용 (ASC: 오름차순, DESC: 내림차순)
- LIMIT은 조회할 행의 개수를 제한
- 두 문법은 함께 사용하는 것이 일반적
- OFFSET으로 페이징 구현 가능
- 정렬 기준 없이 LIMIT만 쓰는 건 위험!
🔚 마무리하며…
지금까지 SQL에서 ORDER BY와 LIMIT을 어떻게 활용하는지 배워봤어요.
정렬과 출력 개수 제한은 거의 모든 실무에서 필요한 기본 중의 기본입니다.
게시판, 상품 리스트, 페이징, 추천 리스트 등 정말 다양하게 쓰여요.
이제 여러분도 직접 실습해보면서 감을 익혀보세요.
꼭 한두 번 삽질(?)해보는 것도 실력 향상에 도움이 된답니다 😉
다음엔 RANK()
나 GROUP BY
같은 조금 더 복잡한 쿼리로 또 만나요!
'Database' 카테고리의 다른 글
다양한 JOIN 활용하기 : 테이블 관계를 한눈에! (1) | 2025.04.08 |
---|---|
관계형 데이터베이스 정규화 이론 완전 정복! (1) | 2025.04.08 |
조건문과 연산자 실습예제 : 실무 데이터로 배우는 SQL 조건 활용법 (1) | 2025.04.08 |
WHERE 절 마스터하기 : 다양한 조건문과 연산자 총정리 (1) | 2025.04.08 |
데이터베이스 조작 예제 : 게시판 테이블 만들고 데이터 입력하기 (0) | 2025.04.07 |