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문이 논리적으로 처리되는 순서가 직관적이지 않아 주의해야 합니다.
'SERVER > DB' 카테고리의 다른 글
[MSSQL] 게시판 paging를 처리하는 방법 3가지 (0) | 2022.01.26 |
---|---|
[MSSQL] identity 컬럼 (0) | 2022.01.14 |