시소당
트리 구조를 나타낼 때는 주로 Connect By구문을 이용한다. 인라인뷰를 함께 사용하여 성능의 효과를 본다.
계정정보: 계정번호, 계정명, 상위계정번호(fk)
계정금액: 계정번호, 지점번호, 회계일자, 계정금액
select a.계정번호, sum(b.계정금액)
from 계정정보 a, 계정금액 b
where b.계정번호 in (select d.계정번호 from 계정정보 d
start with d.계정번호 = a.계정번호
connect by prior d.계정번호 = d.상위계정번호)
and b.회계일자 = ‘961010’
group by a.계정번호;
<개선안>
select a.계정번호, sum(b.계정금액)
from 계정정보 a,
(select 계정번호, sum(계정금액) as 계정금액
from 계정금액
where 회계일자 like ‘199610%’
group by 계정번호 ) b
where b.계정번호 in (select d.계정번호 from 계정정보 d
start with d.계정번호 = a.계정번호
connect by prior d.계정번호 = d.상위계정번호)
group by a.계정번호;