본문 바로가기
DB/MSSQL

[MSSQL] OFFSET - FETCH 이용하여 페이징 처리

by 은z 2022. 3. 16.

MSSQL 2012 이전 (11.X 미만)

예전의 MSSQL (2012 이전)에서는 페이징 쿼리를 하기 위해서는
보통 ROW_NUMBER() 를 사용하여 정렬순으로 번호를 부여한 다음에 중첩쿼리로 복잡하게

가져오는 방법을 사용했다고 한다.

 

이 복잡한 방법말고 좀 더 간단한 쿼리를 알아보자.

 

 

MSSQL 2012 이후 (11.X 이상)

# 양식 
ORDER BY {정렬 대상 컬럼}
OFFSET {건너 뛸 행의 수} ROWS 
FETCH NEXT {가져올 행의 수} ROWS ONLY

ORDER BY를 통해 정렬 기준을 정한 뒤
OFFSET을 통해 건너 뛸 행의 수를 먼저 설정하고
(1부터 가져올 경우 OFFSET 0 ROWS, 11부터 가져올 경우 OFFSET 10 ROWS)

FETCH NEXT 에서 몇 개의 행을 가져올 지 작성하면 된다.
(한 페이지 내에 10개를 가져올 경우 FETCH NEXT 10 ROWS ONLY)

 

 

 

실제 사용 예

	<select id="selectList" resultType="Example">

		SELECT
			NO
			, LOCALE
			, TYPE
			, TITLE
			, CONTENTS
			, SHOW_YN
			, CONVERT(VARCHAR(10), START_DAY, 23) AS START_DAY
			, CONVERT(VARCHAR(10), END_DAY, 23) AS END_DAY
			, ORDER_NO
			, RELATION_URL
			, RELATION_URL_TYPE
			, REG_ID
			, REG_DT
			, MOD_ID
			, MOD_DT
		FROM
			EXAMPLE A
		ORDER BY
			A.REG_DT DESC
		OFFSET #{offsetNo, jdbcType=INTEGER} ROWS FETCH NEXT #{recordCountPerPage, jdbcType=INTEGER} ROWS ONLY

	</select>

 

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] @@IDENTITY (자동증가값) PK값 IDX값 반환  (0) 2022.03.16
[MSSQL] 날짜 포맷 변경하기  (0) 2022.03.15

댓글