본문 바로가기

DB/MSSQL

MSSQL - TOP()과 ROW_NUMBER()를 활용한 데이터 조회 방법

728x90

데이터베이스에서 상위 몇 개의 데이터만 가져오고 싶을 때, SQL Server에서는 TOP()과 ROW_NUMBER()를 사용하여 데이터를 추출할 수 있습니다. (Oracle은 ROWNUM 이용)

SQL Server에서 TOP()과 ROW_NUMBER()를 활용해 데이터를 조회하는 방법을 예제로 살펴보겠습니다.

 


1. 테이블 생성 및 데이터 입력

축구 선수 정보를 담은 간단한 테이블을 만들어 보겠습니다.

이름(NAME), 포지션(POSITION), 등번호(NUMBER)를 저장하고 NUMBER 컬럼을 기본 키로 설정합니다.

-- 테이블 생성
CREATE TABLE FOOTBALL_PLAYER
(
    NAME        NVARCHAR(32),
    POSITION    NCHAR(2),
    NUMBER      NCHAR(2) NOT NULL
    CONSTRAINT [PK_FOOTBALL_PLAYER] PRIMARY KEY CLUSTERED ([NUMBER] ASC)
) ON [PRIMARY];

다음으로, 몇 명의 축구 선수 데이터를 입력해 보겠습니다.

-- 데이터 입력
INSERT INTO FOOTBALL_PLAYER (NAME, POSITION, NUMBER)
VALUES ('이동국', 'FW', '20'),
       ('김형범', 'MF', '22'),
       ('이재성', 'MF', '17'),
       ('최진철', 'DF', '04'),
       ('최철순', 'DF', '25');

2. 전체 데이터 조회

 

-- 전체 데이터 조회
SELECT * 
FROM FOOTBALL_PLAYER;

 

NAME POSITION NUMBER
최진철 DF 04
이재성 MF 17
이동국 FW 20
김형범 MF 22
최철순 DF 25

3. TOP()을 이용한 상위 N개 데이터 조회

선수 등번호를 내림차순으로 정렬한 후 상위 3명의 선수를 가져와 보겠습니다.

-- 상위 3명의 선수 조회 (등번호 기준 내림차순)
SELECT TOP(3) * 
FROM FOOTBALL_PLAYER
ORDER BY NUMBER DESC;

 

NAME POSITION NUMBER
최철순 DF 25
김형범 MF 22
이동국 FW 20

TOP()을 사용하면 이처럼 원하는 상위 몇 개의 데이터를 손쉽게 추출할 수 있습니다.


4. ROW_NUMBER()를 이용한 데이터 조회

ROW_NUMBER()는 쿼리 결과에 고유한 순번을 부여하는 함수입니다.

ROW_NUMBER()를 사용해 등번호 기준 오름차순으로 상위 3개의 데이터를 추출해 보겠습니다.

-- 상위 3명의 선수 조회 (ROW_NUMBER() 사용)
SELECT * 
FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY NUMBER ASC) AS rownum, * 
     FROM FOOTBALL_PLAYER) t 
WHERE t.rownum <= 3;

 

rownum NAME POSITION NUMBER
1 최진철 DF 04
2 이재성 MF 17
3 이동국 FW 20

5. 특정 범위의 데이터 조회

내림차순으로 정렬한 후, 2번째부터 4번째까지의 데이터를 가져오고 싶을 때는 어떻게 해야 할까요?

1) TOP()을 이용한 방법

TOP()을 중첩해서 사용하여 먼저 상위 1개의 데이터를 제외한 후, 그다음 상위 3개의 데이터를 가져옵니다.

-- 2~4번째 선수 조회 (내림차순)
SELECT TOP(3) * 
FROM FOOTBALL_PLAYER 
WHERE NUMBER NOT IN (SELECT TOP(1) NUMBER 
                     FROM FOOTBALL_PLAYER 
                     ORDER BY NUMBER DESC) 
ORDER BY NUMBER DESC;

 

NAME POSITION NUMBER
김형범 MF 22
이동국 FW 20
이재성 MF 17

2) ROW_NUMBER()을 이용한 방법

ROW_NUMBER()를 활용하면 더 간결한 방식으로 범위 데이터를 가져올 수 있습니다.

BETWEEN을 사용해 2~4번째 데이터를 조회합니다.

-- 2~4번째 선수 조회 (ROW_NUMBER() 사용)
SELECT * 
FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY NUMBER DESC) AS rownum, * 
     FROM FOOTBALL_PLAYER) t 
WHERE t.rownum BETWEEN 2 AND 4;

 

rownum NAME POSITION NUMBER
2 김형범 MF 22
3 이동국 FW 20
4 이재성 MF 17

6. 결론

SQL Server에서 데이터를 조회할 때, TOP()과 ROW_NUMBER()는 매우 유용한 도구입니다.

  • TOP()은 간단한 상위 N개의 데이터 추출에 적합하며, 성능 면에서 더 빠를 수 있습니다.
  • ROW_NUMBER()는 보다 복잡한 조건, 예를 들어 특정 범위의 데이터를 조회할 때 유용합니다.

 

728x90
반응형

'DB > MSSQL' 카테고리의 다른 글

MSSQL - 데이터 / 로그파일 용량 줄이기 (dbcc shrinkfile)  (0) 2023.03.30