WITH 문
WITH [테이블명] AS (
SELECT ...
FROM ...
-- [임시테이블 SQL]
)
SELECT ..
FROM ...
-- [사용 테이블]
쿼리를 만들다 보면 하나의 SQL문에서
가공한 테이블을 계속해서 사용해야 할 때가 있다.
가공한 테이블이 쿼리 안에서 계속 쓰다 보면
가독성이 떨어져 혼란스럽고 개발하기 복잡해지는 경우가 종종 있다.
예시
다음의 쿼리는 별로 복잡하지 않지만
엄청 복잡한 쿼리라고 가정해보자
-- 자주 조회할 테이블
SELECT T1.키,T1.컬럼1, T2.컬럼2
FROM T1
LEFT OUTER JOIN T2
ON T1.키 = T2.키
이제 이 쿼리는 복잡한 쿼리를 가져와서
조건, 조인 등으로 사용하면서 더더욱 복잡해질 것이다.
-- 복잡해진 쿼리
SELECT A.키, TEST1.컬럼2-A, TEST2.컬럼2-B
FROM A
LEFT OUTER JOIN
(
SELECT T1.키,T1.컬럼1, T2.컬럼2
FROM T1
LEFT OUTER JOIN T2
ON T1.키 = T2.키
) TEST1
ON A.키 = TEST1.키
AND TEST1.구분코드 = 'A'
LEFT OUTER JOIN
(
SELECT T2.키,T1.컬럼1, T2.컬럼2
FROM T1
LEFT OUTER JOIN T2
ON T1.키 = T2.키
) TEST2
ON A.키 = TEST2.키
AND TEST2.구분코드 = 'B'
복잡해서 잘 안읽히는 코드는 유지보수에도 어려움이 있기 때문에
최대한 보기 좋게 짜는 것도 요령인듯하다
이런 점에서 WITH 문을 활용할 수 있다
-- 간결해진 쿼리
-- 자주 조회할 테이블
WITH TEMP AS(
SELECT T1.키,T1.컬럼1, T2.컬럼2
FROM T1
LEFT OUTER JOIN T2
ON T1.키 = T2.키
)
-- 메인 쿼리
SELECT A.키, TEST1.컬럼2-A, TEST2.컬럼2-B
FROM A
LEFT OUTER JOIN TEMP TEST1
ON A.키 = TEST1.키
AND TEST1.구분코드 = 'A'
LEFT OUTER JOIN TEMP TEST2
ON A.키 = TEST2.키
AND TEST2.구분코드 = 'B'
도움이 된 정보였다면
로그인이 필요 없는 공감 버튼 꾹 눌러주세요!
'데이터베이스 > Oracle' 카테고리의 다른 글
[ORACLE] 여러 행을 한 행으로 묶기(WM_CONCAT) (0) | 2020.07.29 |
---|---|
[Oralce SQL] 테이블 컬럼 추가 (DEFAULT 포함) (0) | 2019.07.30 |
[팁] ERROR : ORA-28000 계정 잠김 (1) | 2017.09.12 |
[팁] USER 패스워드 변경 (0) | 2017.09.12 |
[팁] ERROR : ORA-28009 오라클 sys계정 접속 (0) | 2017.09.11 |