본문 바로가기
Database·SQL

Oracle WITH 구문을 MySQL로 변환하기

by Leica 2020. 12. 8.
반응형

Oracle WITH 구문을 MySQL로 변환하기

MySQL 8.0 이전 버전에서는 WITH 구문이 지원되지 않기 때문에 WITH 구문을 변환하려면 다음 선택지 중 하나를 택할 수 있다.

  • Temporary Table(임시 테이블)
  • Derived Table
  • Inline View

본 글에서는 inline view를 이용하여 Oracle WITH 구문을 변경해 볼 것이다.

 

WITH 구문을 Inline View로 변환하는 예제

편의상 간단한 쿼리를 예제로 들었다.

 

ℹ️Oracle WITH:

WITH SAMPLE_WITH AS (SELECT ID FROM SAMPLE_TBL)

SELECT A.ID
FROM ANOTHER_TBL A,
     SAMPLE_WITH B
WHERE A.ID = B.ID

 

ℹ️MySQL Inline View:

SELECT A.ID 
FROM ANOTHER_TBL A,
     (SELECT ID FROM SAMPLE_TBL) B
WHERE A.ID = B.ID

 

MyBatis의 sql, include와 함께 사용하기

MyBatis 사용 시 WITH 구문과 inline view는 MyBatis의 <sql>과 <include>를 사용해서 반복 코드를 줄이고 깔끔하게 정리할 수 있다.

 

ℹ️Oracle WITH:

<sql id="info">
 SELECT AGT_ID FROM SAMPLE_TBL
</sql>

<select id="get..." parameterType="..." resultType="...">
  WITH SAMPLE_WITH AS (<include refid="info" />)

  SELECT A.ID
  FROM ANOTHER_TBL A,
       SAMPLE_WITH B
  WHERE A.ID = B.ID  
</select>

 

ℹ️MySQL Inline View:

<sql id="info">
 SELECT AGT_ID FROM SAMPLE_TBL
</sql>

<select id="get..." parameterType="..." resultType="...">
  SELECT A.ID 
  FROM ANOTHER_TBL A,
       (<include refid="info" />) B
  WHERE A.ID = B.ID
</select>

 

[참고] Oracle WITH 구문

  • WITH 구문 내의 쿼리 결과(서브쿼리)가 여러 번 사용될 때 유용하다.
  • 서브쿼리 블럭에 이름을 지정할 수 있다.
  • 오라클 옵티마이저는 쿼리를 인라인뷰나 임시 테이블로 여긴다.
  • Oracle 9 이상 지원

 

[참고] MySQL Inline View

  • FROM 절에서 사용되는 서브쿼리를 인라인 뷰 라고한다.
  • 서브쿼리의 결과가 마치 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있다.
  • 인라인 뷰는 SQL 문이 실행될 때만 임시로 생성되는 동적뷰이다.
  • 인라인 뷰를 사용하는 것은 조인 방식을 사용하는 것과 같다.

 

References

 

반응형

댓글