-
OFFSET 및 FETCHSQLServer 2020. 1. 13. 16:36
테스트 환경
- OS : Windows 2008 R2 DataCenter
- DBMS : SQL Server 2012 Enterprise Edition + SP4
- 참고문서 : https://docs.microsoft.com/ko-kr/previous-versions/sql/sql-server-2012/ms188385(v=sql.110)
내용
개요
행의 수를 제한 할 경우 보통 TOP 키워드를 사용했습니다.
SQL Server 2012 부티 새롭게 지원되는 OFFSET 및 FETCH 를 사용하여 행 수 제한이 가능하다.
MS 에서는 OFFSET 및 FETCH 를 사용하여 행 수 제한하는 것을 권장합니다.
TOP 절 대신 OFFSET 및 FETCH 절을 사용하여 쿼리 페이징 솔루션을 구현하고 클라이언트 응용 프로그램으로 보내는 행 수를 제한하는 것이 좋습니다.구문
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ ,...n ]
[ ]
::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
]
}인수
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
쿼리 식에서 행을 반환하기 전에 건너뛸 행 수를 지정합니다. 값은 0보다 크거나 같은 정수 상수 또는 식일 수 있습니다.offset_row_count_expression은 변수, 매개 변수 또는 상수 스칼라 하위 쿼리일 수 있습니다. 하위 쿼리를 사용하는 경우 외부 쿼리 범위에 정의된 열을 참조할 수 없습니다. 즉, 외부 쿼리와 상관 관계를 만들 수 없습니다.
ROW와 ROWS는 ANSI 호환성을 위해 제공되는 동의어입니다.
쿼리 실행 계획에서 오프셋 행 개수 값은 TOP 쿼리 연산자의 Offset 특성에 표시됩니다.
FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
OFFSET 절을 처리한 후에 반환할 행 수를 지정합니다. 값은 1보다 크거나 같은 정수 상수 또는 식일 수 있습니다.fetch_row_count_expression은 변수, 매개 변수 또는 상수 스칼라 하위 쿼리일 수 있습니다. 하위 쿼리를 사용하는 경우 외부 쿼리 범위에 정의된 열을 참조할 수 없습니다. 즉, 외부 쿼리와 상관 관계를 만들 수 없습니다.
FIRST와 NEXT는 ANSI 호환성을 위해 제공되는 동의어입니다.
ROW와 ROWS는 ANSI 호환성을 위해 제공되는 동의어입니다.
쿼리 실행 계획에서 오프셋 행 개수 값은 TOP 쿼리 연산자의 Rows 또는 Top 특성에 표시됩니다.
예제
-- 정수 상수를 사용하여 OFFSET 및 FETCH 값 지정
USE AdventureWorks2012;
GO
-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID
OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;-- 변수를 사용하여 OFFSET 및 FETCH 값 지정
USE AdventureWorks2012;
GO
-- Specifying variables for OFFSET and FETCH values
DECLARE @StartingRowNumber tinyint = 1
, @FetchRows tinyint = 8;
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC
OFFSET @StartingRowNumber ROWS
FETCH NEXT @FetchRows ROWS ONLY;'SQLServer' 카테고리의 다른 글
필터링된 인덱스 (0) 2020.01.14 SQL Server 2012 에서 지원하는 기본 함수 (0) 2020.01.13 OUTPUT (데이터 변경 분 저장하기) (0) 2020.01.13 MERGE문 (0) 2020.01.13 CTE (공통 테이블 식) (0) 2020.01.13