0Pricing
SQL Academy · 강의

LIMIT와 OFFSET

처음 N개 행을 가져오고 페이지를 나눕니다.

LIMIT와 OFFSET은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

몇 개의 행만 가져오기

때로는 조건에 맞는 모든 행이 아니라 처음 몇 개만 필요합니다. LIMIT은 쿼리가 반환하는 행의 수를 제한합니다.

이 쿼리는 최대 5개의 제품을 반환합니다.

SELECT name, price
FROM products
LIMIT 5;

ORDER BY가 없는 LIMIT은 무작위입니다

LIMIT만 사용하면 일부 행을 가져오지만, 어떤 행인지는 정해지지 않습니다. 결과가 의미 있고 반복 가능하도록 항상 ORDER BY와 함께 사용하세요.

-- The 5 newest orders, deterministically
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 5;

OFFSET으로 행 건너뛰기

OFFSET은 반환하기 전에 일정 수의 행을 건너뛰도록 데이터베이스에 지시합니다. LIMIT과 함께 사용하면 페이지 매김의 기반이 됩니다.

이 쿼리는 처음 10개 행을 건너뛰고 다음 5개를 반환합니다.

SELECT name, price
FROM products
ORDER BY name
LIMIT 5 OFFSET 10;

페이지 만들기

페이지 크기가 10일 때 페이지 번호는 다음과 같은 오프셋에 대응합니다.

  • 1페이지: OFFSET 0
  • 2페이지: OFFSET 10
  • 3페이지: OFFSET 20

공식은 OFFSET = (page - 1) * page_size입니다.

-- Page 3 with 10 rows per page
SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;

연산 순서

데이터베이스는 다음 순서로 절을 적용합니다. WHERE로 필터링하고, ORDER BY로 정렬한 다음, OFFSET과 LIMIT으로 줄입니다.

따라서 항상 정렬되고 필터링된 결과를 페이지 단위로 가져오게 됩니다.

SELECT name, price
FROM products
WHERE price > 0
ORDER BY price DESC
LIMIT 10 OFFSET 0;

LIMIT ALL과 OFFSET 0

LIMIT ALL은 "제한 없음"을 의미하며(LIMIT을 생략한 것과 같음), OFFSET 0은 아무것도 건너뛰지 않습니다. 값이 동적으로 만들어질 때 가끔 유용하게 사용할 수 있습니다.

SELECT name
FROM products
ORDER BY name
LIMIT ALL OFFSET 0;

표준 FETCH 구문

PostgreSQL은 SQL 표준 형식도 지원합니다: OFFSET n ROWS FETCH NEXT m ROWS ONLY. LIMIT/OFFSET과 정확히 같은 작업을 수행하지만, 표현이 더 장황합니다.

SELECT name, price
FROM products
ORDER BY name
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;

큰 OFFSET이 느린 이유

큰 OFFSET을 사용해도 데이터베이스는 건너뛴 모든 행을 여전히 읽어서 버려야 합니다. OFFSET 100000은 버리기만 할 행 100,000개를 읽으므로, 페이지를 많이 넘긴 경우 느려집니다.

-- Reads 100000 rows then discards them
SELECT id, name
FROM products
ORDER BY id
LIMIT 10 OFFSET 100000;

키셋 페이지 매김

더 빠른 대안은 키셋(탐색) 페이지 매김입니다. OFFSET 대신 마지막으로 본 행을 기억해 두고 그 행 뒤에 있는 행을 요청합니다.

인덱스를 사용해 건너뛰지 않고 다음 페이지로 바로 이동합니다.

-- Next page after the last seen id (e.g. 5000)
SELECT id, name
FROM products
WHERE id > 5000
ORDER BY id
LIMIT 10;

안정적인 페이지를 위한 안정적인 정렬

ORDER BY에 동률이 있으면 페이지를 불러올 때마다 행의 순서가 바뀌어 중복이나 누락이 발생할 수 있습니다. 기본 키와 같은 고유 키를 정렬의 마지막 기준으로 추가하면 페이지를 넘길 때 결과가 일관됩니다.

SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 10 OFFSET 20;

단일 상위 행

LIMIT 1은 가장 비싼 상품이나 가장 최근 주문처럼 행 하나를 빠르게 가져오는 방법입니다. 적절한 ORDER BY와 함께 사용하십시오.

SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 1;

빠른 확인

페이지마다 10개 행을 표시합니다. 3페이지를 반환하는 절은 무엇입니까?

복습

이제 결과를 다음과 같이 나눌 수 있습니다:

  • LIMIT n은 행 수를 제한합니다
  • OFFSET m은 행을 건너뜁니다. OFFSET = (page-1)*size
  • 예측 가능한 페이지를 위해 항상 ORDER BY와 함께 사용합니다
  • 속도를 위해 큰 OFFSET보다 키셋 페이지 매김을 우선합니다

다음으로 이 도구를 사용해 상위 N 레코드를 찾아봅니다.

SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;

자주 묻는 질문

“LIMIT와 OFFSET” 강의는 무료인가요?

네 — “LIMIT와 OFFSET” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“LIMIT와 OFFSET”에서 뭘 배우나요?

처음 N개 행을 가져오고 페이지를 나눕니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“LIMIT와 OFFSET” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. ORDER BY로 정렬하기
  2. 여러 열을 기준으로 정렬하기
  3. LIMIT와 OFFSET
  4. 상위 N개 레코드 찾기
← SQL Academy(으)로 돌아가기