본문 바로가기

프로그래밍&IT/SQL Server (MS-SQL)

TOP, OFFSET-FETCH 필터 - 리턴되는 행의 수 제한

TOP

SQL Server 7.0부터 지원

쿼리가 반환하는 결과 중 특정 행의 수나 퍼센트만으로 제한.

 

현재 Data 수는 295개

 

- 5개의 행 리턴

SELECT TOP 5 * FROM SalesLT.Product

 

- 10퍼센트의 행 리턴

: 총 295개 중 10% 29.5 -> 올림 해서 30개를 조회한다.

: 16퍼센트 > 47.2 -> 48개를 조회한다.

SELECT TOP 10 PERCENT * FROM SalesLT.Product -- 10 퍼센트만 조회

 

 

WITH TIES

동일한 값을 가지는 행을 출력하게 할때 사용한다.

10개를 조회해도, 동일한 값이 있으면 조회한다.

(테스트를 위해 좀 극단적인 데이터를 조회했음.)

SELECT TOP 10 WITH TIES * FROM SalesLT.Product
WHERE COLOR IS NOT NULL
ORDER BY Color

 

OFFSET-FETCH 필터

TOP은 확실히 많이 쓰이지만 아래 2가지 단점 있다.

  1. 표준구문 형태가 아니다.
  2. 건너뛸 수 있는 기능 없다

SQL SERVER 2012의 OFFSET-FETCH 필터는 ORDER BY 절의 일부분으로 간주되어 처리

  • OFFSET - 얼마나 많은 행들을 건너뛸지 설정하며
  • FETCH - 건너편 다음에 얼마나 많은 행을 필터링해서 출력할지 설정.

먼저 ProductID로 정렬해서 조회하면,

처음에 680부터 시작하는 데이터를,

10개 이후를 건너뛴 715번부터 해서

총 25개를 리턴한다.

SELECT * FROM SalesLT.Product
ORDER BY ProductID
OFFSET 10 ROWS FETCH NEXT 25 ROWS ONLY
-- 10개 행을 건너뛰고 이후에 25개의 ROW를 리턴

 

- 행을 뛰어넘기 싫다면, OFFSET 0 ROWS