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씩 증가하면서 화면에 표시되는 것을 볼 수 있다.
'programming > DataManage' 카테고리의 다른 글
MYSQL 문자열 길이 채우기 자릿수 맞추기 LPAD RPAD 사용 방법 (0) | 2023.02.26 |
---|---|
mysql 특수문자 이스케이프 사용하기 문자열을 자유롭게 사용한다 (0) | 2023.02.16 |
mysql 테이블 목록 조회 방법 show tables과 information_schema 사용 (0) | 2023.02.02 |
mysql 테이블 수정 템플릿 만들기 ALTER TABLE (0) | 2023.01.01 |
mysql 테이블 생성 템플릿 만들기 CREATE TABLE (0) | 2022.12.19 |
댓글