2014/08/15 - [DB/MySQL] - MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자
2014/08/15 - [DB/Oracle] - ORACLE 오라클 rownum을 이용하여 페이징 처리하기
이번에는 MS-SQL 2005버전 이상부터 지원을 하는 ROW_NUMBER() OVER(ORDER BY 정렬조건) 을 이용하여 페이징 처리를 다루도록 해보겠음.
MS-SQL 2000 버전에는 TOP을 이용하여 페이징 처리를 하였는데 이부분은 페이지가 뒤로 가면 갈수록
느려지는 단점이 있다.
2005부터 ROW_NUMBER를 제공하기 시작했는데 ORACLE만큼 페이징이 편해졌다.
역시 샘플 데이터를 기준으로 설명하도록 하겠음.
1. create table 생성
create table page_table ( [idx] bigint NULL , [title] varchar(100) NULL , [conetnt] varchar(200) NULL );
2. 가상의 데이터 IMPORT
구조 및 가상의 데이터는 이전에 포스팅한 mysql 페이징과 같다
그렇다면 이제 페이징 테스트를 해보도록 하겠음.
각 페이징 처리를 할때마다 20개씩 출력해보도록 하겠다.
쿼리는 다음과 같다.
-- 1페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 1 and 20 -- 2페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 21 and 40 . . -- 5페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 81 and 100 -- 존재하지 않는 6페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 101 and 120
3, 실 행 하 기
1페이지
2페이지
5페이지
존재하지 않는 6페이지
ROW_NUMBER() OVER (ORDER BY ... )
쉽게 생각해서 테이블 데이터아 rownum이라는 컬럼을 추가해서 1부터 출력된 테이블의 갯수를
순차적으로 증가 시켜주는거라고 생각하면 될것이다.
WHERE 절에
where rownum컬럼 between start and end
라는 조건을 주어서 시작ROWNUM ~ 마지막으로 출력하고자하는 ROWNUM
을 데이터에 출력을 하는것이다.
물론 BETWEEN으로 안하고
>= AND <=
이와같은 문법을 이용하여 페이징 처리를 해주어도 무관함.
마지막 존재하지 않는 6페이지일경우는 그냥 한번 출력해보았음.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MS-SQL - 널체크(ISNULL 사용하기) (0) | 2014.08.23 |
---|---|
MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM) (1) | 2014.08.13 |
MS-SQL 계층형 트리구조 쿼리 (재귀호출) - with ...(col 1, col 2 ...,col n) as ... union . (2) | 2014.08.12 |
MS-SQL 시퀀스 identity 생성 및 초기화하기 (0) | 2014.08.11 |