본문 바로가기
컴퓨터관련/MS-SQL

[MS-SQL]TOP에 변수 사용하여 데이터 가져오기

by 빛과 어둠사이 2019. 3. 29.
728x90
반응형
SMALL

데이터를 추출하다보면

일부 데이터만 가져와야 하는 경우가 많이 있습니다.

Oracle에서는 ROWNUM 명령어를 이용해서 가져왔었습니다.

그런데 MS-SQL에서는 TOP명령어를 이용해서 가져오게 되어 있습니다.


그런데 탑 명령어를 사용할 때,

변수를 가지고,

해당 변수의 ROW만큼만 데이터를 가져와야 하는 경우가 있습니다.


이 때, 어떻게 해야 하는지

확인해보도록 하겠습니다.


우선 테스트용으로 임시테이블을 생성하고,

데이터를 넣도록 하겠습니다.

CREATE TABLE #rank_tmp
(
	na VARCHAR(10)
	, are INT
)

INSERT INTO #rank_tmp VALUES ('aaa', 20);
INSERT INTO #rank_tmp VALUES ('bbb', 15);
INSERT INTO #rank_tmp VALUES ('ccc', 30);
INSERT INTO #rank_tmp VALUES ('ddd', 40);
INSERT INTO #rank_tmp VALUES ('eee', 20);
INSERT INTO #rank_tmp VALUES ('fff', 16);
INSERT INTO #rank_tmp VALUES ('ggg', 26);
INSERT INTO #rank_tmp VALUES ('hhh', 75);
INSERT INTO #rank_tmp VALUES ('iii', 62);
INSERT INTO #rank_tmp VALUES ('jjj', 61);
INSERT INTO #rank_tmp VALUES ('kkk', 40);
INSERT INTO #rank_tmp VALUES ('lll', 32);
INSERT INTO #rank_tmp VALUES ('mmm', 32);
INSERT INTO #rank_tmp VALUES ('nnn', 42);
INSERT INTO #rank_tmp VALUES ('ooo', 51);


SELECT * FROM #rank_tmp
;


위처럼 넣으면 결과는 다음과 같습니다.



이를 가지고 상위 5개의 데이터만 가져오도록 하겠습니다.

TOP 5를 이용하면 됩니다.


예시 쿼리는 다음과 같습니다.

SELECT TOP 5 * FROM #rank_tmp


위 쿼리를 실행시키면 아래와 같이 나오게 됩니다.



이제 변수를 사용하여 TOP명령어를 구동시켜 보도록 하겠습니다.

쿼리는 다음과 같이 작성하였습니다.

DECLARE @tmp INT
SET @tmp = 5

SELECT TOP @TMP * FROM #rank_tmp


그리고 실행을 시켰습니다.


헐....에러가 나네요.

TOP 명령에서는 변수를 사용할 수 없는 건가요?????

아닙니다.

탑 명령을 사용할 때도 변수를 사용할 수 있습니다.

괄호()를 사용해서 하시면 되십니다.

어떻게 사용하면 되는지 예시 쿼리를 보여드리도록 하겠습니다.


쿼리는 다음과 같습니다.

DECLARE @tmp INT
SET @tmp = 5

SELECT TOP (@TMP) * FROM #rank_tmp

위처럼 쿼리를 작성하였습니다.

그리고 실행을 시켰습니다.



그랬더니 위처럼 나오네요.

정상적으로 잘 나오네요.


이렇게 TOP명령어에 변수를 사용해서 하시면 되십니다.


물론, Java나 다른 프로그램에서 쿼리를 날린다면,

굳이 SQL문에서 할필요는 없을 수 있습니다.

그렇지만, 프로시저에서 구동을 한다던가,

DB 작업중 필요하다면

해당 기능은 유용한 기능입니다.


저 또한 얼마 전 프로시저를 만들 때 사용을 했었고요.

그러니 필요하실 때 잘 사용하시면 좋을 것 같습니다.




이상으로 MS-SQL에서 TOP명령어에 변수를 사용하여 일부 데이터 추출하는 방법이였습니다~




728x90
반응형
LIST

'컴퓨터관련 > MS-SQL' 카테고리의 다른 글

[MS-SQL]순위 구하기  (0) 2019.04.02
[MS-SQL]트리거 확인하기  (0) 2019.04.01
[MS-SQL]행 일련번호 가져오기  (0) 2019.03.21
[MS-SQL]SSMS 단축키 지정하기  (0) 2019.03.20
[MS SQL]IF문 사용하기  (2) 2019.03.19