오라클에서 WITH ..AS의 역할과 특징은 무엇일까?
한 복잡한 쿼리내에 SELECT구문에서 같은 쿼리 블럭이 한번 이상 발생할 때 사용할 수 있다.
쿼리 블럭의 결과를 회수하고, 사용자 테이블 스페이스에 그것을 저장한다. 그래서 WITH 항을 사용하면 성능이 개선된다.
한 복잡한 쿼리내에 SELECT구문에서 같은 쿼리 블럭이 한번 이상 발생할 때 사용할 수 있다.
쿼리 블럭의 결과를 회수하고, 사용자 테이블 스페이스에 그것을 저장한다. 그래서 WITH 항을 사용하면 성능이 개선된다.
예제)
WITH test AS
(
SELECT 'A1' a, 'A2' b, 1 c FROM dual
UNION ALL
SELECT 'A2', 'A3', 2 FROM dual
UNION ALL
SELECT 'A2', 'A4', 2 FROM dual
UNION ALL
SELECT 'A4', 'A5', 3 FROM dual
UNION ALL
SELECT 'A5', 'A6', 2 FROM dual
UNION ALL
SELECT 'A4', 'A7', 2 FROM dual
UNION ALL
SELECT 'A11', 'A7', 3 FROM dual
UNION ALL
SELECT 'A1', 'A11', 2 FROM dual
)
SELECT a, b, c,
(SELECT EXP(SUM(LN(c)))
FROM test
START WITH b = t.b
CONNECT BY PRIOR a = b) d
FROM test t
START WITH a = 'A1'
CONNECT BY PRIOR b = a;
(
SELECT 'A1' a, 'A2' b, 1 c FROM dual
UNION ALL
SELECT 'A2', 'A3', 2 FROM dual
UNION ALL
SELECT 'A2', 'A4', 2 FROM dual
UNION ALL
SELECT 'A4', 'A5', 3 FROM dual
UNION ALL
SELECT 'A5', 'A6', 2 FROM dual
UNION ALL
SELECT 'A4', 'A7', 2 FROM dual
UNION ALL
SELECT 'A11', 'A7', 3 FROM dual
UNION ALL
SELECT 'A1', 'A11', 2 FROM dual
)
SELECT a, b, c,
(SELECT EXP(SUM(LN(c)))
FROM test
START WITH b = t.b
CONNECT BY PRIOR a = b) d
FROM test t
START WITH a = 'A1'
CONNECT BY PRIOR b = a;
참조 : 오라클 교재 SQL FundmentalⅡ 6 - 22
'Oracle > SQL' 카테고리의 다른 글
multi table insert (0) | 2009.12.14 |
---|---|
index를 사용하여 쿼리를 튜닝해보자 (0) | 2009.11.16 |
계층형 쿼리(Hierachical select) (0) | 2009.11.14 |
입력 소요시간 비교(insert 여러건 vs connect by 이용) (0) | 2009.11.11 |
Merge (0) | 2009.11.09 |