안녕하세요.
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 |
댓글