RDBS/MYSQL

[MYSQL]ROWNUM 이용한 데이터 번호 매기기

MoonSta 2022. 12. 14. 13:31

⚡️@ROWNUM

 조회 할 데이터의 번호를 매겨야 하는 경우 @ROWNUM을 사용하여 행 번호를 매길 수 있다. 

⚡️MEMBER 테이블

NAME AGE
박OO 23
문OO 26
김OO 22

⚡️사용자 정의 변수

 ROWNUM을 사용하기 앞서 사용자 정의 변수의 선언 및 초기화부터 알아보겠습니다. 

SET @변수명 = 대입값; OR SET @변수명 := 대입값;

SELECT @변수명 := 대입값;

--임의의 변수 생성 후 초기화

⚡️조회 데이터 채번 

 이제 ROWNUM을 활용하여 위의 MEMBER 테이블의 데이터의 번호를 매겨보겠습니다. 

SET @ROWNUM=0; --변수 생성 및 초기화
SELECT @ROWNUM:=@ROWNUM+1 AS ROWNUM --1씩 증가
     , A.NAME
     , A.AGE
  FROM MEMBER

⚡️OUTPUT

ROWNUM NAME AGE
1 박OO 23
2 문OO 26
3 김OO 22

⚡️초기화를 하지 않는다면?

⚡️OUTPUT

ROWNUM NAME AGE
4 박OO 23
5 문OO 26
6 김OO 22

 변수를 초기화하지 않는다면, 마지막 조회된 ROWNUM 이후의 번호가 채번 된다. 따라서 항시 초기화해주어야 한다.


⚡️선언 및 초기화 방식

 set 구문을 사용하는 것 말고도 다른 절에서도 초기화가 가능하다. 

⚡️FROM절 초기화

SELECT @ROWNUM:=@ROWNUM+1 AS ROWNUM --1씩 증가
     , A.NAME
     , A.AGE
  FROM MEMBER
    , (SELECT @ROWNUM:=0) RN; --RN은 별칭

⚡️WHERE절 초기화

SELECT @ROWNUM:=@ROWNUM+1 AS ROWNUM --1씩 증가
     , A.NAME
     , A.AGE
  FROM MEMBER
  WHERE (@ROWNUM:=0)=0;

⚡️정리

  ORACLE에서는 내부적으로 ROWNUM이라는 키워드를 사용하여 행의 번호를 나타낼 수 있다. 하지만 MYSQL에는 ROWNUM이라는 키워드가 없으므로 임의의 변수 ROWNUM을 만들어 초기화한 후 ORACLE과 같은 기능을 할 수 있도록 구현했다. 타 블로그 글을 보면 MYSQL임에도 불구하고 "ROWNUM을 활용한 행 채번"이라는 제목들이 많다. 하지만 필자가 생각하기에는 "사용자 정의 변수를 활용한 행 채번"이라는 말이 맞는다고 생각한다. 

'RDBS > MYSQL' 카테고리의 다른 글

[MYSQL]INSERT - 여러 건 삽입  (12) 2023.01.09
[프로그래머스]입양 시각 구하기(1)-MySQL  (9) 2023.01.07
[MYSQL]USING과 ON의 차이  (6) 2023.01.05
[MYSQL]윈도우함수(Window Function)  (5) 2023.01.03
[MYSQL]INDEX란?  (2) 2023.01.02