데이터를 추출하다보면
일부 데이터만 가져와야 하는 경우가 많이 있습니다.
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명령어에 변수를 사용하여 일부 데이터 추출하는 방법이였습니다~
'컴퓨터관련 > 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 |