본문 바로가기
programming/DataManage

mysql select 행번호 표시 @row_number 세션 변수 사용

by 개코 - 개발과 코딩 2023. 2. 14.

mysql의 SELECT 조회 결과에 행번호를 추가하기 위해 세션변수를 사용할 수 있다. 세션 변수를 만들고 1씩 증가하는 방식으로 사용하며 변수의 사용방법은 다른 프로그래밍 언어와 같다. ROW_NUMBER() 함수가 있지만 mysql 8.0 이전 버전에서는 사용할 수 없다. ROW_NUMBER() 함수를 사용할 수 없다면 세션 변수를 사용하여 SELECT 결과에 행번호를 추가할 수 있다.

mysql select 행번호 표시
@row_number 세션 변수 사용

mysql 에서 데이터를 조회할 때 사용하는 것은 SELECT 문을 사용한다.

SELECT를 사용하여 데이터를 조회하면 행번호 ( row number ) 가 필요할 때가 생기는데 이 때 사용하는 것이 row_number() 함수를 사용하는 것이다.

하지만 row_number() 함수는 mysql 8.0 이전 버전에 대해서는 지원하지 않는다.

데이터베이스의 버전이 올라갈 때마다 마이그레이션을 진행하겠지만 그렇지 않은 경우 난처해 진다.

row_number() 함수를 사용할 수 없는 경우 세션 변수 ( session variable ) 을 사용하여 SELECT 결과에 행번호를 추가할 수 있다.

세션 변수

mysql 에서 세션 변수가 어떤 것인지 간단히 언급해 본다.

세션변수는 mysql 에서 사용자변수로 사용된다. 세션이기 때문에 현재 사용자에 제한되며 공유되지 않는다. 즉, 같은 세션변수라도 다른 사용자가 사용해도 상관없다.

이 세션변수는 프로그램에 사용자가 접속한 후 접속이 끊길 때까지 고유하게 지속된다.

세션 변수의 사용은 다음과 같으면 @ 를 붙여 세션변수 임을 나타낸다.

@세션변수명 = 값
;
SELECT @세션변수명
;

행번호 표시하기

세션변수의 개념적으로 와닿지 않는다면 @가 붙은 변수라 생각하자.

행번호를 표시하기 위해 세션변수를 사용하는 것은 SELECT 의 내부적인 동작구조를 가시적으로 볼 수 있는 기회이기도 하다.

먼저 아래의 구분은 세션변수의 값을 계속 증가시키는 동작 구문이다.

다른 프로그래밍 언어의 반복문에서 사용하는 것과 같은 의미이다.

SET @row_number = 0
;

SET @row_number := @row_number + 1
;

SELECT @row_number
;

위의 1을 증가시키는 연산식을 SELECT 구문에 추가하면 내부적으로 반복하면서 값이 증가되는 것을 알 수 있다.

SET @row_number = 0;   

SELECT insDate
     , ( @row_number:=@row_number+1 ) AS rumnum
  FROM tb_test
;

위의 코드는 SELECT 할 때 tb_test 에 들어간 데이터만큼 반복하면서 세션변수를 1씩 증가시킬 것이다.

SELECT를 사용한 쿼리가 실행될 때 내부적으로 반복을 통해 동작한다는 것을 알 수 있는 구문이다.

전체코드 및 실행결과

위에서 언급한 것을 테스트해 보도록 하자.

임의의 테이블이 있고, 데이터가 존재한다.

위의 구문을 바탕으로 세션변수를 통해 행번호를 화면에 표시할 수 있다.

코드는 크게 다르지 않다.

SET @row_number = 0;   

SELECT insDate
     , ( @row_number:=@row_number+1 ) AS rumnum
  FROM tb_test
;

결과를 보자.

SELECT 한 결과에서 데이터수만큼 행번호가 1씩 증가하면서 화면에 표시되는 것을 볼 수 있다.

반응형

댓글