본문 바로가기
Programming/SQL

[MySQL] 1부터 100까지 숫자 테이블 생성

by 코딩하는 금융인 2022. 12. 23.

안녕하세요.

MySQL로 1부터 100까지의 숫자 테이블을 만드는 방법에 대해 알아보겠습니다.

 

 MySQL 숫자 시퀀스 만들기

- MySQL에서 여러 스키마를 활용하여 희망하는 데이터를 뽑을 때, 임시 숫자 테이블이 필요한 경우가 많습니다. MySQL의 버전에 따라 다른 방법에 대해 알아보겠습니다.

 

: MySQL 8.0 버전 이상

WITH RECURSIVE cte AS (
    SELECT 1 AS n
    UNION ALL
    SELECT n + 1 FROM cte WHERE n < 100
)
SELECT n FROM cte

- with문으로 1부터 100까지의 숫자를 가진 cte 테이블 생성할 수 있음.

- 결과의 행 수가 많아 생략함.

 

: MySQL 구버전

- MySQL 버전이 낮아 with문을 사용할 수 없을 때는 노가다 방식이긴 하지만, union으로 만들 수 있음.

--1부터 10까지 숫자 테이블
select * from (select 1 x union 
               select 2 union 
               select 3 union 
               select 4 union 
               select 5 union 
               select 6 union 
               select 7 union 
               select 8 union 
               select 9 union select 10) A

 

- 또다른 방식으로는 빈 테이블을 만들어 반복문 역할을 하는 프로시저를 실행하여 만들 수 있음.

-- #1 빈 테이블 만들기
CREATE TABLE example_num (num INT PRIMARY KEY);

-- #2 num_func 프로시저 생성
DELIMITER $$ -- 문장 구분자 기호 $$
CREATE PROCEDURE num_func()
-- 1부터 시작하므로 DEFAULT 1로 설정
-- 100까지 WHILE 반복문 설정
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE (i <= 100) DO
        INSERT INTO 'example_num' VALUE (i);
        SET i = i + 1;
    END WHILE;
END$$ -- 프로시저 종료
DELIMITER ; -- 문장 구분자 다시 ;로 변경

-- #3 프로시저 실행 및 조회
CALL num_func();
SELECT * FROM example_num;

 

: 실제 테이블 조회 시 숫자 번호까지 함께 조회

SELECT (@val := @val + 1) - 1 AS value, alpha
FROM example, (SELECT @val := 1) AS tt

출력결과

- 위와 같이 기존 테이블에 index처럼 숫자를 붙여서 조회 가능함.

반응형

'Programming > SQL' 카테고리의 다른 글

[MySQL] Using ON 비교 및 차이  (0) 2023.01.05
[MySQL] Join 함수 및 예시  (4) 2022.12.26
[MySQL] 빠진 번호 찾기  (1) 2022.12.22
[MySQL] 비어있는 자리수 0으로 채우기  (12) 2022.12.22
[MySQL] 삼항연산자 사용법 (IF)  (4) 2022.12.20

댓글