반응형

ORDER BY와 LIMIT 사용법 완벽 정리
: 정렬과 데이터 추출의 핵심

여러분, SQL에서 데이터를
"예쁘게" 정렬하고,
필요한 "딱 몇 개"만 뽑아내고 싶었던 적 없으셨나요?
이 두 가지, 생각보다 엄청 자주 쓰입니다!

 

 

안녕하세요, 데이터베이스를 배우는 우리 초보 개발자 여러분!

오늘은 SQL 쿼리 중에서도 실무에서 정말 자주 쓰이는 핵심 문법 두 가지, ORDER BYLIMIT에 대해 자세히 알아보려 해요.

게시판 글을 최신순으로 정렬한다든지, 인기 상품 상위 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 BYLIMIT의 조합이 필요한 순간입니다.

📊 실습: 판매량 기준 상위 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 BYLIMIT을 제대로 쓰기 위해선 둘을 같이 사용하는 패턴에 익숙해져야 합니다.

생각보다 조합이 중요하거든요!

📐 패턴 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을 너무 크게 주면 성능 저하 → 페이징 처리 최적화 필요

📌 핵심 요약

  1. ORDER BY는 정렬 기준을 지정할 때 사용 (ASC: 오름차순, DESC: 내림차순)
  2. LIMIT은 조회할 행의 개수를 제한
  3. 두 문법은 함께 사용하는 것이 일반적
  4. OFFSET으로 페이징 구현 가능
  5. 정렬 기준 없이 LIMIT만 쓰는 건 위험!

🔚 마무리하며…

지금까지 SQL에서 ORDER BYLIMIT을 어떻게 활용하는지 배워봤어요.

정렬과 출력 개수 제한은 거의 모든 실무에서 필요한 기본 중의 기본입니다.

게시판, 상품 리스트, 페이징, 추천 리스트 등 정말 다양하게 쓰여요.

 

이제 여러분도 직접 실습해보면서 감을 익혀보세요.

꼭 한두 번 삽질(?)해보는 것도 실력 향상에 도움이 된답니다 😉

 

다음엔 RANK()GROUP BY 같은 조금 더 복잡한 쿼리로 또 만나요!

반응형

+ Recent posts