🔐 Database

ORACLE의 Connect By 구문을 MYSQL 쿼리로 변환하기

1uckyj 2022. 6. 24. 17:51

 

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 > 이다.

< seq_tbl >

위와 같이 시퀀스 넘버가 쭉 들어있는 테이블이다.

이와 같이 채번 테이블을 미리 생성해두고 사용하는 방법이 두 번째 방법이다.

SELECT seq_val AS N1
FROM seq_tbl
WHERE seq_val <= 10;

이렇게 사용하면 훨씬 코드가 간단해진다.

 


 

방식은 이렇게 있지만, 재귀 쿼리 방식은 MySQL 8.0 부터 지원되며

채번 테이블을 이용하는 방식이 성능상 유리 하다고 한다.