반응형
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
- stackoverflow.com/questions/1382573/how-do-you-use-the-with-clause-in-mysql
- powerofwriting.tistory.com/entry/Oracle-WITH-%EA%B5%AC%EB%AC%B8-%EC%98%88%EC%A0%9C
- hhseong.tistory.com/88
반응형
'Database·SQL' 카테고리의 다른 글
DBMS와 기억장치의 관계 및 메모리 활용 (0) | 2021.09.28 |
---|---|
데이터베이스의 기본 구조, 개념 및 용어 정리 (0) | 2021.09.18 |
MySQL Workbench 사용 중 Error: DBMS connection is not available (0) | 2020.12.07 |
Oracle의 TO_CHAR 함수와 대응되는 MySQL 함수 (2) | 2020.12.06 |
H2 Database 설치, 서버 실행, 접속 방법 (Windows, MacOS with homebrew) (0) | 2020.03.18 |
댓글