SQL의 LIMIT / OFFSET (또는 TOP) 절은 쿼리 결과로 반환되는 행의 수를 제한하거나, 특정 지점부터의 행을 건너뛰고 가져올 때 사용됩니다. 이는 특히 페이지네이션(Pagination) 기능을 구현하거나, 상위 N개의 결과를 조회할 때 매우 유용합니다.
LIMIT / OFFSET (주로 MySQL, PostgreSQL, SQLite)LIMIT은 반환할 최대 행 수를 지정하고, OFFSET은 건너뛸 시작 행 수를 지정합니다.
문법:
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name [ASC|DESC]
LIMIT row_count OFFSET offset_value;
LIMIT row_count: 반환할 최대 행의 수를 지정합니다.OFFSET offset_value: 결과 집합의 시작 부분에서 건너뛸 행의 수를 지정합니다. OFFSET은 0부터 시작합니다 (첫 번째 행은 OFFSET 0입니다).예시 1: 상위 5개 주문 조회
SELECT OrderID, Amount
FROM Orders
ORDER BY Amount DESC
LIMIT 5;
Amount)을 기준으로 내림차순 정렬한 후, 가장 높은 5개의 주문만 반환합니다.예시 2: 페이지네이션 (두 번째 페이지의 10개 항목 조회)
데이터를 한 페이지에 10개씩 보여줄 때, 1페이지는 0부터 10개, 2페이지는 10부터 10개를 가져와야 합니다.
- 첫 번째 페이지 (10개): OFFSET 0, LIMIT 10
SELECT OrderID, OrderDate
FROM Orders
ORDER BY OrderDate DESC
LIMIT 10 OFFSET 0;
-- 두 번째 페이지 (다음 10개): OFFSET 10, LIMIT 10
SELECT OrderID, OrderDate
FROM Orders
ORDER BY OrderDate DESC
LIMIT 10 OFFSET 10;
OrderDate를 기준으로 내림차순 정렬한 후, 첫 10개를 건너뛰고 그 다음 10개의 주문만 반환합니다.주의사항: LIMIT와 OFFSET을 사용할 때는 ORDER BY 절을 함께 사용하는 것이 매우 중요합니다. ORDER BY가 없으면 데이터베이스 시스템이 행을 반환하는 순서가 보장되지 않으므로, 쿼리를 재실행할 때마다 다른 결과가 나올 수 있습니다.
TOP (주로 SQL Server)TOP 절은 SELECT 키워드 바로 뒤에 위치하며, 반환할 행의 최대 수를 지정합니다. PERCENT 키워드를 사용하여 백분율로 지정할 수도 있습니다.
문법:
SELECT TOP (expression) [PERCENT] [WITH TIES] column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name [ASC|DESC];
TOP (expression): 반환할 행의 수를 지정합니다. expression은 숫자로 된 값을 나타냅니다.