페이지 결과
ORDER BY 절의 확장인 OFFSET-FETCH를 사용하면 쿼리에서 선택된 행 범위만 반환할 수 있습니다. 여기에 추가로 시작점(오프셋)과 반환할 행 수를 지정하는 값(페치 값)을 제공할 수 있습니다. 이 확장은 결과를 페이징하는 편리한 기법을 제공합니다.
페이지에 원하는 행 수를 선택하여 한 “페이지”의 행을 한 번에 반환하려면 OFFSET-FETCH 절이 포함된 각 쿼리를 다른 모든 쿼리와 별도로 실행해야 합니다. 서버 쪽 상태가 유지되지 않으므로 클라이언트 쪽 코드를 통해 결과 집합에서 위치를 추적해야 합니다.
OFFSET-FETCH 구문
엄밀히 말해 ORDER BY 절에 속하는 OFFSET-FETCH 절의 구문은 다음과 같습니다.
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY]
OFFSET-FETCH 사용
OFFSET-FETCH를 사용하려면 다음 예제와 같이 0일 수 있는 시작 OFFSET 값과 반환할 행 수(선택 사항)를 제공합니다.
이 예제에서는 처음 10개 행을 반환한 다음, ListPrice를 기준으로 다음 10개의 제품 데이터 행을 반환합니다.
SELECT ProductID, ProductName, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC
OFFSET 0 ROWS --Skip zero rows
FETCH NEXT 10 ROWS ONLY; --Get the next 10
‘다음’ 페이지의 제품 데이터를 검색하려면 OFFSET 절을 사용하여 건너뛸 행 수를 지정합니다.
SELECT ProductID, ProductName, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC
OFFSET 10 ROWS --Skip 10 rows
FETCH NEXT 10 ROWS ONLY; --Get the next 10
구문 정의에서 알 수 있듯이 OFFSET 절은 필수이지만 FETCH 절은 그렇지 않습니다. FETCH 절을 생략하면 OFFSET 이후의 모든 행이 반환됩니다. 또한 FIRST 및 NEXT와 마찬가지로 ROW 및 ROWS 키워드를 서로 바꿔 사용할 수 있어서 더욱 자연스러운 구문을 사용할 수 있습니다.
특히 데이터 페이지 간을 이동하는 경우와 같이 결과의 정확성을 보장하기 위해서는 고유한 순서를 지정하고 결정적 결과를 산출하는 ORDER BY 절을 구성하는 것이 중요합니다. SQL Server의 쿼리 최적화 프로그램이 작동하는 방식으로 인해, 행 범위가 결정적이지 않은 한 기술적으로 한 행이 둘 이상의 페이지에 표시될 수 있습니다.