SERVER/DB

[MSSQL] TOP 사용하기

eunoia07 2022. 1. 17. 15:47

1. TOP 이란?


TOP문은 쿼리 결과 중 상위 몇개만 표시하기 위해 사용하는 구문입니다.

[특징]

- ORDER BY 절과 함께 사용하지 않으면 TOP은 임의 순서로 N개의 행을 반환합니다.

- ORDER BY 절과 함께 사용하면 TOP은 처음 순서부터 N개의 행을 반환합니다.

- INSERT, UPDATE, DELETE 등 DML문과도 같이 사용하여 영향을 받을 행을 지정할 수 있습니다.

 

[사용방법]

SELECT TOP [조회할 레코드 수] [컬럼명] FROM [테이블명] WHERE [조건절]

조회할 레코드 수는 세 가지 방법으로 표현이 가능합니다.

1. 상수 값 사용

2. 변수 사용

3. 백분율 지정

 

[중복값 포함 - WITH TIES]

SELECT TOP [조회할 레코드 수] WITH TIES [컬럼명] FROM [테이블명] WHERE [조건절]

기본적으로 TOP은 중복값을 포함하지 않습니다. WITH TIES를 사용하면 중복값을 포함한 결과를 얻을 수 있습니다.

2. TOP문 동작원리


동작원리를 살펴보기 위해 1-10까지 난수로 구성된 테이블에서 1-5까지 순서대로 5개의 행만 쿼리하는 과정을 살펴보겠습니다.

[1. 배열 생성]

5개의 행만 쿼리하기로 했으므로 5개의 배열을 생성합니다.

 

[2. 생성된 배열에 값 삽입]

랜덤으로 테이블의 값이 배열로 삽입됩니다. 만약 ORDER BY 구문이 없다면 이 배열을 그대로 출력합니다.

[3. 배열 정렬 후 제일 오른쪽 값 변경]

랜덤으로 배열에 삽입된 값을 정렬 시킨 후 테이블 행의 갯수가 배열보다 크다면 그 다음 테이블의 값을 가져와 제일 오른쪽 값과 비교해 오른쪽 값보다 크면 값을 변경합니다. 이렇게 1-5까지 정렬이 완료될때까지 배열의 제일 오른쪽 값과 테이블의 값을 비교하는 프로세스를 반복합니다.

 

3. TOP문 사용시 주의사항


  • DELETE문에 사용할 경우 지정된 열에 중복 값이 포함된 경우 더 많은 레코드를 삭제할 수 있기 때문에 기본 키 열에만 사용해야 합니다.
  • UPDATE문에 사용할 경우 ORDER BY를 사용할 수 없기 때문에 정의되지 않은 행에 대해 값의 수정이 발생할 수 있습니다.
  • MERGE문에 사용할 경우 전체 원본 테이블과 전체 대상 테이블이 조인된 후에  TOP문이 적용됩니다.
  • UNION 등 SELECT 작업에 사용된 경우 TOP 및 ORDER BY문이 논리적으로 처리되는 순서가 직관적이지 않아 주의해야 합니다.