⚡️@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 |