본문 바로가기

프로그래밍/MSSQL

[MSSQL] paging 페이징 처리 (OFFSET ROWS FETCH) (MySQL LIMIT)

반응형

 

 

 

 

 

 

 

paging query

데이터를 5개씩 보여주는 페이징 쿼리를 작성해보자

 

원본 데이터

 

DECLARE @PAGE_NO INT = 1 -- 페이지 번호
DECLARE @PAGE_SIZE INT = 5 -- 한 페이지에 보여줄 row 수

SELECT rownum
	, name
	, age
	, totalCnt
FROM
(
	SELECT ROW_NUMBER() OVER(ORDER BY age) AS rownum
		, name, age
		, COUNT(*) OVER() AS totalCnt
	FROM table_ggmouse
) A
WHERE rownum BETWEEN ((@PAGE_NO-1)*@PAGE_SIZE)+1 AND (@PAGE_NO*@PAGE_SIZE)

 

페이지 번호가 1일때 결과

 

페이지 번호가 2일때 결과

 

페이지 번호가 3일때 결과

 

 

 

 

 

 

OFFSET ROWS FETCH

SQL Server 2012부터 지원되는 OFFSET ROWS FETCH를 이용하여 paging query를 작성해보자

 

OFFSET ROWS FETCH 사용법

 

ORDER BY 컬럼
OFFSET 숫자 {ROW | ROWS}
FETCH {FIRST | NEXT} 숫자 {ROW | ROWS} ONLY

 

OFFSET 숫자 {ROW | ROWS}

해당 숫자의 행을 건너뛰게 된다. 즉, 해당 숫자 이후의 행부터 출력된다.

 

FETCH {FIRST | NEXT} 숫자 {ROW | ROWS} ONLY

해당 숫자의 개수만큼 출력된다.

 

 

 

 

위의 예제와 동일하게 데이터를 5개씩 보여주는 페이징 쿼리를 작성해보자

 

DECLARE @PAGE_NO INT = 1 -- 페이지 번호
DECLARE @PAGE_SIZE INT = 5 -- 한 페이지에 보여줄 row 수

SELECT name, age
FROM table_ggmouse
ORDER BY age
OFFSET (@PAGE_NO-1)*@PAGE_SIZE ROW
FETCH NEXT @PAGE_SIZE ROW ONLY

 

페이지번호 1의 결과

 

페이지번호 2의 결과

 

페이지번호 3의 결과

 

 

 

 

 

 

반응형