ORACLE에서 쓰는 함수 중, Mysql에서는 지원하지 않는 함수들이 있는데 대표적으로 Connect By절이 있다.
일반적으로 계층형 구조로 결과 조회가 필요할 때 Connect by 구문을 사용하게 된다.
간단한 예시로 다음과 같이 sql을 작성했을때,
SELECT LEVEL n1
FROM DUAL
CONNECT BY LEVEL <= 5
결과는 아래와 같이 출력된다.
< result >
이를 크게 두 가지 방법으로 변환할 수 있다.
1. 재귀 쿼리 방식 ( WITH RECURSIVE •• )
WITH RECURSIVE TT AS
(
SELECT 1 N1
FROM DUAL
UNION ALL
SELECT T.N1 + 1 N1
FROM TT AS T
WHERE T.N1 < 10 )
SELECT N1 FROM TT;
위와 같이 재귀 쿼리 방식을 사용하면 위에 작성한 예시와 동일한 결과가 나온다.
2. 채번 테이블을 사용하는 방식
아래는 채번 테이블 < seq_tbl > 이다.
위와 같이 시퀀스 넘버가 쭉 들어있는 테이블이다.
이와 같이 채번 테이블을 미리 생성해두고 사용하는 방법이 두 번째 방법이다.
SELECT seq_val AS N1
FROM seq_tbl
WHERE seq_val <= 10;
이렇게 사용하면 훨씬 코드가 간단해진다.
방식은 이렇게 있지만, 재귀 쿼리 방식은 MySQL 8.0 부터 지원되며
채번 테이블을 이용하는 방식이 성능상 유리 하다고 한다.
'🔐 Database' 카테고리의 다른 글
[MYSQL] Decimal 타입 컬럼 형변환하여 Insert/Update 하기 (0) | 2022.11.17 |
---|---|
[MYSQL] Decimal 타입 컬럼 데이터 소숫점 이하 0 삭제하기 (0) | 2022.11.17 |
ORACLE / MYSQL 성능 차이에 관하여 (0) | 2022.07.28 |
[MYSQL/MARIADB] 조회 (시스템변수, 버전, FUNCTION ... ) (0) | 2022.07.21 |