데이터베이스를 다루면서 때로는 연속된 숫자 값을 사용해야 하는 경우가 있습니다. 이 글에서는 MySQL에서 1부터 1000까지 연속된 숫자를 한번에 데이터로 삽입하는 방법과, 1부터 100까지 증가하는 값을 얻는 쿼리문에 대해 소개하겠습니다.
1. 연속된 숫자 값을 얻는 방법
MySQL에서 dual을 이용해서 연속된 값을 획득하는 것이 가능합니다. 다음의 쿼리를 예로 들면:
SELECT @N := @N +10 AS n from tables, (select @N:=-10 from DUAL ) NN LIMIT 16
하지만 이 쿼리의 문제는 tables의 행 길이가 원하는 수 만큼 존재하지 않으면, 그만큼의 값만 나옵니다.
예를 들어, tables의 행길이가 1개라면, 출력 결과는 0만 나옵니다.
n |
0 |
2. WITH 구문의 제한
특정 MySQL 버전에서는 with 구문의 사용이 제한됩니다. 예를 들어 MySQL 8 이전 버전에서는 이 구문을 사용할 수 없습니다. 이런 제한 때문에 다른 방법을 찾게 됩니다.
3. 1000줄의 데이터 삽입
위에서 진행했던 제한적인 기능을 우회하기 위해, 연속된 1000개의 숫자를 담는 테이블을 반복문을 이용해서 미리 생성하기로 했습니다.
var sqls = "INSERT into increasetable (n) VALUES ";
var nlength = 1001;
for(var nn = 1; nn < nlength; nn++)
{
sqpls+= "(" + nn + ")";
if(nn<nlength-1) sqls+= ", ";
}
1000까지 다 입력하긴 귀찮아서 1부터 1000까지 자동으로 증가시켜서 테이블에 insert를 해놓았습니다.
위 반복문을 풀어보면
INSERT into increasetable
(n)
VALUES
(1),
(2),
(3),
...,
(1000)
이렇게 여러 값을 한번에 insert할 수 있게 됩니다.
4. 증가하는 행 얻기
이제 1000개의 데이터가 increasetable에 존재하기 때문에, 원하는 만큼의 증가하는 행을 쉽게 얻을 수 있습니다.
values 뒤에 앞쪽과 같은 ()형식으로 콤마로 구분해서 여러개를 적으면 여러개의 데이터를 한번에 insert할 수 있습니다.
5. 결과
그래서 다시 증가하는 행을 구하는 쿼리문을 실행해보면
SELECT @N := @N +10 AS n from increasetable, (select @N:=-10 from DUAL ) NN LIMIT 10
n |
0 |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |
100 |
처럼 결과가 나오게 됩니다.
'Language > SQL' 카테고리의 다른 글
[MYSQL] AUTO_INCREMENT 증가값 초기화 및 재정렬하기 (0) | 2021.10.08 |
---|---|
[MYSQL] 테이블(TABLE)과 컬럼(COLUMN)의 코멘트(COMMENT) 정보 조회하기 (0) | 2021.05.12 |
[MYSQL] 쿼리문으로 연령대별 인원수 평균점수 구하기 (0) | 2021.03.02 |
[MySQL] 쿼리문 동작을 보다 쉽게 보기 위한 HeidiSQL(하이디SQL) (0) | 2021.02.18 |
[MYSQL] DATE_FORMAT을 이용한 날짜 형식 변환하기 (0) | 2021.02.09 |