MSSQL에서 MySQL의 LIMIT 구현하는 방법

MSSQL을 사용할때 MySQL 처럼 LIMIT을 구현해야 하는경우가 있습니다. ASP를 사용한다면 그럴필요는 없겠지만 PHP를 사용한다면 필요하겠죠.

그래서 여기저기 찾아 봤습니다.

1. TOP … PKColumn NOT IN ( … )

이 방식은 NOT IN을 이용해서 필요 없는 PK값을 먼저 뽑고 그것을 제외한 나머지에서 TOP으로 뽑아오는 방식입니다.

select top 10 * from tblname
where id not in ( 
	select top 100 id from tblname
);

위 쿼리는 tblshop에서 이전 페이지에 해당하는 100개의 PK를 뽑아서 그것외에 남은것들의 TOP 10을 가져오는 쿼리입니다. 101~110번까지 결과를 가져옵니다.

이 방식을 사용하려면 테이블에 꼭 PK가 있어야 겠네요. 또하나 귀찮아 지는 점은 where 절이나 orde by 절이 붙어 버리면 not in 안, 밖으로 모두 붙여야 한다는 점입니다. 쿼리를 생성해 주는 핼퍼가 없다면 코딩 오류로 인한 잘못된 결과가 나올 수도 있습니다.

2. row_number() over() … rownum between …

select * from (
	select row_number() over (order by id) as rownum, * from tblname
) t1
where t1.rownum between 101 and 110;

이 방식은 row_number()함수를 이용해서 줄번호를 매기고 줄번호에서 해당하는 것을 뽑아오는 방식입니다.

이 방식은 첫번째 방식처럼 PK가 꼭 필요 하지 않습니다. 다만, 줄번호를 매겨야 하기 때문에 대이타 량이 많으면 쿼리 속도가 무지무지 느려집니다.

결국 속도를 생각하면 쿼리가 좀 길어지더라도 첫번째 방식을 사용하는 것이 좋겠네요.

[참고사이트]

1. http://sung.world.co.kr/index.php?document_srl=3384, mysql의 LIMIT 와 같은 결과 얻기…., 달건
2. http://msdn.microsoft.com/ko-kr/library/ms186734.aspx, ROW_NUMBER(Transact-SQL) SQL Server 2008 R2, msdn.microsoft.com
3. http://stackoverflow.com/questions/5805822/mssql-top-limit-operation-with-extra-where-and-order-by-clauses, MSSQL TOP (LIMIT) operation with extra WHERE and ORDER BY clauses, stackoverflow.com

Published by: benant

WEB PROGRAMMER. PHP, ASP, XML, Javascript, VBScript, PL/SQL, MySQL, Oracle. scrollads.co.kr 새로운 모바일 광고 서비스. trenue.com 시스탬 트래이딩 서비스. blogman.co.kr 블로그 운영 관리 서비스. creget.co.kr 해외 상품 구매대행. 핫딜 정보 제공 서비스. fgshop.co.kr - 독립형 쇼핑몰 솔루션.

Categories 일상의 기록댓글 한 개

One thought on “MSSQL에서 MySQL의 LIMIT 구현하는 방법”

  1. 구글에서 검색해서 제가 쓴 글을 다시보니 기분이 묘하네요. 살짝 뿌듯뿌듯도 하고요.
    정리를 잘한건지 이번에도 우주 쉽게 해결했네요. ㅎㅎㅎ

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중