AI 시대 DB 모델링 & SQL 완벽 마스터3-3 ORDER BY / LIMIT
테크타니 LEARN — 섹션 03 · SQL 핵심 문법

비싼 순으로 줄 세우고, 딱 5개만 —
ORDER BY 와 LIMIT

3-2에서 WHERE 로 행을 걸렀다면, 이번엔 결과를 원하는 순서로 줄 세우고(ORDER BY) 위에서 N개만 끊어옵니다(LIMIT). "가장 비싼 상품 TOP 5", "최근 가입자 5명" — SQL 에서 가장 자주 쓰는 패턴이 이 강의에서 손에 잡힙니다.

난이도쉬움소요10분 (영상 3–4분 + 실습)준비물3-2 완료 (WHERE)실습 DBshop — products · members

이번 섹션의 여정

3-1 ~ 3-2

완료 ✓

3-3 ORDER BY / LIMIT

지금 여기

3-4 ~ 3-5

GROUP BY · HAVING

3-6 ~ 3-8

JOIN · 뻥튀기 함정 ⭐ · CASE

섹션 4 — DB 모델링

강의 메인

오늘 배우는 두 가지 — 줄 세우기, 그리고 끊기

지금까지 SELECT 로 꺼내고 WHERE 로 걸렀습니다. 그런데 실무 요구는 한 발 더 나갑니다 — “가격 비싼 순으로 보고 싶다”, “상위 5개만 보고 싶다”. 이걸 해결하는 게 오늘의 두 절, ORDER BY(정렬)와 LIMIT(행 제한)입니다.

SELECT 문의 뼈대 — 오늘 채우는 두 칸
SELECT 무엇을 ← 3-1
FROM 어디서 ← 3-1
WHERE 어떤 행만 ← 3-2
ORDER BY 어떤 순서로 ← 오늘
LIMIT 몇 개만 ← 오늘
시작 전 체크
DBeaver 실행 + MySQL 연결
shop DB 사용 중 (USE shop; 또는 Set as Default)
3-2 WHERE 까지 따라옴

ORDER BY — 결과를 줄 세운다

바로 쳐보겠습니다. 상품을 가격 비싼 순으로 정렬하는 쿼리입니다.

SELECT
  *
FROM
  products
ORDER BY
  price DESC;
DBeaver — SQL Editor (Ctrl + Enter)
SELECT * FROM products ORDER BY price DESC;
product_idproduct_namepricecategory_id
8패딩 점퍼1290001
9무선 이어폰890002
29향수890005
15키보드750002
3후드 집업650001
30 rows fetched — 가장 비싼 패딩 점퍼가 맨 위로

DESC내림차순(큰 → 작은)이라는 뜻입니다. 방향 키워드는 딱 두 개뿐이에요.

키워드의미
ASC오름차순 (작은 → 큰). 기본값 — 안 써도 ASC
DESC내림차순 (큰 → 작은)
이것만 외우세요

ASC 는 생략 가능, DESC 는 명시 필수. ORDER BY price 라고만 쓰면 자동으로 오름차순입니다. 내림차순을 원하면 반드시 DESC 를 붙여야 해요.

숫자만 정렬되는 게 아닙니다. 날짜도 똑같이 줄 세울 수 있어요.

-- 가입일 오래된 순 (ASC 는 생략 — 기본값)
SELECT
  *
FROM
  members
ORDER BY
  joined_at;
 
-- 가입일 최신 순 (DESC 는 반드시 명시)
SELECT
  *
FROM
  members
ORDER BY
  joined_at DESC;

다중 정렬 — 1차로 묶고, 2차로 다시 줄 세운다

정렬 기준은 하나가 아니어도 됩니다. 콤마로 구분해서 여러 컬럼을 줄 세울 수 있어요.

SELECT
  *
FROM
  members
ORDER BY
  gender ASC,
  age DESC;

“성별로 먼저 정렬(F → M), 같은 성별 안에서는 나이 많은 순.”

DBeaver — 다중 정렬 결과
SELECT * FROM members ORDER BY gender ASC, age DESC;
member_idmember_namegenderagejoined_at
18안소영F442026-03-10
12오지은F402025-10-05
6강서연F382025-04-12
15권현석M502026-01-08
9조성민M452025-07-22
3박민수M422025-02-10
20 rows — F 블록이 먼저, 각 블록 안에서는 나이 내림차순
다중 정렬의 규칙

왼쪽이 1차 정렬, 오른쪽이 2차 정렬. 1차 기준에서 동률인 행만 2차 기준으로 다시 정렬됩니다. F 끼리 한 덩어리로 묶이고, 그 안에서 나이순으로 다시 줄을 서는 거예요.

실무에서 매일 만나는 패턴

“부서별로 정렬, 같은 부서 안에선 직급 순”, “카테고리별, 같은 카테고리 안에선 가격 내림차순” — 회사 보고서의 단골 요구가 전부 이 패턴입니다.

동률의 순서는 보장되지 않습니다

아까 결과에서 무선 이어폰과 향수가 둘 다 89,000원이었죠. 정렬 기준이 같으면 둘 중 뭐가 먼저 나올지는 DB 마음입니다. 순서까지 못 박고 싶다면 ORDER BY price DESC, product_id 처럼 보조 정렬 컬럼을 하나 더 붙이면 됩니다 — 방금 배운 다중 정렬이 바로 그 해결책이에요.

LIMIT — 위에서 N개만 끊는다

정렬했으면, 이제 위에서 끊을 차례입니다.

SELECT
  *
FROM
  products
ORDER BY
  price DESC
LIMIT 5;
DBeaver — 가장 비싼 상품 TOP 5
SELECT * FROM products ORDER BY price DESC LIMIT 5;
product_idproduct_namepricecategory_id
8패딩 점퍼1290001
9무선 이어폰890002
29향수890005
15키보드750002
3후드 집업650001
5 rows fetched — 가장 비싼 상품 5개, 끝

여기서 중요한 건 LIMIT 은 거의 항상 ORDER BY 와 한 세트라는 점입니다.

✕ LIMIT 만 달랑

LIMIT 5 — “어떤” 5개인지 모름

정렬 기준이 없으면 그냥 DB가 주는 대로 위에서 5개입니다. 어떤 행이 올지 보장이 없어서, 의미 있는 TOP 5가 아니에요.

✓ ORDER BY 와 세트로

줄 세운 다음 끊어야 TOP 5

먼저 ORDER BY 로 줄 세우고, 그 다음 LIMIT 으로 위에서 끊어야 “가장 비싼 5개”라는 의미가 생깁니다.

⭐ SQL 에서 가장 자주 쓰는 조합 중 하나

ORDER BY + LIMIT. “인기 상품 TOP 10”, “최근 가입자 5명”, “매출 상위 100건” — 전부 이 두 줄 패턴입니다. 이 조합은 외워두세요.

하나 더 쳐볼게요 — “가장 최근에 가입한 5명”.

SELECT
  *
FROM
  members
ORDER BY
  joined_at DESC
LIMIT 5;
DBeaver — 최근 가입자 5명
SELECT * FROM members ORDER BY joined_at DESC LIMIT 5;
member_idmember_namegenderagejoined_at
20백서윤F212026-04-02
19류재민M322026-03-25
18안소영F442026-03-10
17황태웅M262026-02-28
16노수아F302026-02-15
5 rows fetched — 신규 가입자 리포트 완성

OFFSET — 페이지 넘기기 (선택)

TOP 5 말고 “6위부터 10위” 가 보고 싶다면? OFFSET 으로 앞에서 몇 개를 건너뛸지 정합니다.

SELECT
  *
FROM
  products
ORDER BY
  price DESC
LIMIT 5 OFFSET 5;
쿼리결과 범위
LIMIT 5 OFFSET 01 ~ 5위
LIMIT 5 OFFSET 56 ~ 10위
LIMIT 5 OFFSET 1011 ~ 15위
지금은 가볍게만

게시판이나 쇼핑몰의 페이징(1페이지, 2페이지…)이 이 원리로 돌아갑니다. 다만 학습 단계에서는 LIMIT 만 알아도 충분해요 — OFFSET 은 “이런 게 있다” 정도로만 기억하고 넘어갑시다.

한눈에 정리

키워드의미예시
ORDER BY aa 오름차순 (기본값)ORDER BY price
ORDER BY a DESCa 내림차순ORDER BY price DESC
ORDER BY a, b DESCa 우선, 같은 a 끼리 b 내림ORDER BY gender, age DESC
LIMIT N상위 N 개LIMIT 5
LIMIT N OFFSET MM 개 건너뛰고 N 개LIMIT 5 OFFSET 5
✓ 오늘의 핵심 한 줄

ORDER BY 로 줄 세우고, LIMIT 으로 위에서 끊는다. 이 두 줄이 “가장 비싼 상품 TOP 5” 같은 실무 질문의 표준 답안입니다.

자주 막히는 지점

① ORDER BY 를 WHERE 앞에 썼더니 에러가 나요

SQL 은 절을 쓰는 순서가 정해져 있습니다. 순서를 바꾸면 syntax error 가 납니다.

FIX ▸절의 순서는 문법으로 고정 — SELECT → FROM → WHERE → ORDER BY → LIMIT. LIMIT 은 항상 맨 끝.
② ORDER BY gender, age DESC — gender 도 내림차순인 줄 알았어요

이 쿼리에서 gender 는 방향이 생략됐으니 기본값 ASC, age 만 DESC 입니다.

FIX ▸방향 키워드는 바로 앞 컬럼 하나에만 적용. 둘 다 내림차순이면 ORDER BY gender DESC, age DESC 처럼 컬럼마다 붙이세요.
③ LIMIT 5 결과가 실행할 때마다 달라요

정렬 기준이 없거나 동률인 행이 있으면 순서가 보장되지 않습니다. 고장이 아니라 SQL 의 원래 동작이에요.

FIX ▸ORDER BY 를 먼저 확인 — 없으면 추가하고, 동률이 있다면 ORDER BY price DESC, product_id 처럼 보조 정렬 컬럼을 붙이세요.

짧고 굵게 끝났습니다. 연습 문제로 손에 익혀두세요 — 다음 3-4에서는 “카테고리별 상품 수가 몇 개야?” 같은 “~별” 사고법, GROUP BY 와 집계 함수로 넘어갑니다.

NEXT LESSON3-3 연습 문제

가장 비싼 상품 TOP 5, 최근 가입자 5명 — 방금 배운 패턴을 직접 쳐보며 굳힙니다.

GO ▸ 연습 문제 풀기