안녕하세요 박성원입니다.
쿠쿠 이번에 저와 함께 보실 과제는 바로바로바로~~ 'TOP N'구문입니다.
사실 DBA에게는 너무나도 필요한 구문이죠!!
이번에 조사하면서 느낀건데 말이죠!!
인간이 공기의 소중함을 모르듯이 DBA는 top나 limit의 소중함을 모르는듯합니다!!!
사실 거창하게 고찰이라고 할 것까지는 없고, 각 버전별 차이점과 단순히 예제를 통해서 정리 해 볼까합니다.
그럼 들어가보죵~~ ^-^
■ top N?
DML과 함께 사용되며 Query 결과집합에서 주어진 row의 N 수만큼 혹은 % 만큼의 결과를 반환한다.
■ 버전별 차이점?
A. 7.0에서는 조건에 해당되는 모든 데이터를 읽은 후 full sort방식으로 통해서 결과 집합을 추출했지만
이후 버전부터는 N개의 데이터를 임시로 저장할 수 있는 버퍼를 메모리에 생성한 후 이 버퍼에
저장된 가장 큰 값이나 작은 값만으로 비교대상으로 산정한다.
B. 2000에서는 select와 함께 쓰이며 N을 변수가 아닌 상수로 명시해야한다.
C. 2005에서는 DML과 함께 쓰이며 N을 변수(or Query)와 상수 모두 사용 가능하다.
■ 문법
[ Top (expression) [PERCENT] [ WITH TIES] ]
■ 정의
A. expression
Top에 지정할 수 있는 변수 혹은 상수, 또는 표현식이 오며 ‘( )’를 통한 표기를 권장합니다.
B. WITH TIES
Order by와 함께 사용되며 지정된 expression 내에서 중복값이 있는 경우 중복값을 포함하여
결과를 리턴합니다.
■ 예제
create table test_top ( a int not null, b varchar(2) not null ); insert into test_top values (0, 'a'); insert into test_top values (1, 'b'); insert into test_top values (2, 'c'); insert into test_top values (3, 'd'); insert into test_top values (4, 'e'); insert into test_top values (5, 'f'); insert into test_top values (6, 'g'); insert into test_top values (7, 'h'); insert into test_top values (8, 'h');
A. 2000에서의 사용예 (동적쿼리를 이용)
Declare @num char(1) declare @query_str varchar(200) Set @num=4 set @query_str = 'select top ' + @num + ' * from test_top exec(@query_str)
B. 2005에서의 사용예
- 변수를 이용한 TOP
- 변수를 이용한 TOP
declare @num int set @num = 4 select top(@num) * from test_top
- 쿼리를 이용한 TOP
select top( select count(b) from test_top where b = 'h' ) * from test_top order by b desc
- DML을 이용한 TOP
a. delete top(1) from test_top
b. select top(1) * into test_copy from test_top
c. insert into test_copy select top(1) * from test_top
d. update top(1) test_top set b = 'i' where b='h'
- WITH TIES
select top(1) with ties b from test_top order by b desc
'MSSQL > SQL Server 2005 new Feature' 카테고리의 다른 글
데이터베이스의 분리 및 이동, 연결 (0) | 2009.12.07 |
---|---|
Sql Server CLR Integration (0) | 2009.12.01 |
Cascading Referential Integrity Constraint (0) | 2009.11.26 |
사용자와 스키마 분리 (3) | 2009.11.25 |
TRIGGER 고찰 (0) | 2009.11.19 |