Oracle Database TIP
재미있는 SQL문(계층구조 쿼리의 예제) 18 4 57,694

by 김정식 CONNECT BY START WITH 계층구조 상관관계 PRIOR [2002.06.03]


  이전 강좌에서 START WITHCONNECT BY절을 이용해서 계층 구조로 쿼리를 해오는것을 살펴봤습니다. 이번에는 계층구조를 이용해서 역순으로 쿼리를 해오는것을 보겠습니다.

  
-- 조금 깔끔하게 보기 위해서.. 셋팅 먼저 하고요.. 
C:\> SQLPLUS scott/tiger
SQL> SET LINESIZE 100
SQL> SET PAGESIZE 100
SQL> COL ename FORMAT A20 

SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, mgr, job 
     FROM emp 
     START WITH EMPNO=7839
     CONNECT BY PRIOR empno=mgr;
      
ENAME                   EMPNO        MGR JOB
------------------- ---------- ---------- ---------
KING                      7839            PRESIDENT
    JONES                 7566       7839 MANAGER
        SCOTT             7788       7566 ANALYST
            ADAMS         7876       7788 CLERK
        FORD              7902       7566 ANALYST
            SMITH         7369       7902 CLERK
        
            
-- 위 SQL문은 EMPNO가 7839인 것을 기준으로 EMPNO와 MGR컬럼을 
-- 계층구조로 비교해서 결과값을 반환 합니다. 
-- 위 SQL문의 CONNECT BY PRIOR empno=mgr 이 부분을..한번 바꺼 볼까요.. 
-- 아래처럼.. CONNECT BY empno=PRIOR mgr 이렇게 바꺼서 한번 실행해 보세요..
-- 그럼..역순으로.. 쿼리를 해서 결과값을 반환 합니다 
-- 위에 결과값과 비교해 보세요..  
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, mgr, job 
     FROM emp
     START WITH EMPNO=7369
     CONNECT BY empno=PRIOR mgr; 
 
ENAME                     EMPNO       MGR  JOB
-------------------- ---------- ---------- ---------
SMITH                      7369       7902 CLERK
    FORD                   7902       7566 ANALYST
        JONES              7566       7839 MANAGER
            KING           7839            PRESIDENT 
    

- 강좌 URL : http://www.gurubee.net/lecture/1401

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 김정식 [2004.03.16 08:41:40]
이렇게 하면 한줄로 나오겠지..
SELECT lvl3||' > '||lvl2||' > '||lvl1 lvl
FROM
(SELECT MAX(DECODE(lvl, 3, category_name)) lvl3,
MAX(DECODE(lvl, 2, category_name)) lvl2,
MAX(DECODE(lvl, 1, category_name)) lvl1
FROM
(SELECT LEVEL lvl, category_name
FROM wp_category
WHERE category_id > 0
START WITH category_id=1913
CONNECT BY category_id=PRIOR parent_id))

by 곽태영 [2008.03.13 15:27:45]
이렇게 하면 레벨에 관계없이 몇개의 카테고리도 가로로 한줄로 나오게되겠죠.
select substr(max(sys_connect_by_path( b, ' > ' )),+4)
from
(
select a, b, rownum rnum
from temp_table2
)
start with rnum = 1
connect by prior rnum = rnum-1

by 김명섭 [2012.10.30 00:03:10]

안녕하세요. 계층구조 많은 도움이 되었습니다.
이 구조에 목차까지 더하고 싶은데, 어떻게 하면 좋을까요?
1
1.1
1.2
1.2.1
1.2.2
1.3
2
2.1
....
이런식으로 말이죠...
아무리 고민해도 답이 안나오는군요.


by 데미소다a [2015.02.04 09:20:59]

SUBSTR( SYS_CONNECT_BY_PATH( LEVEL, '.' ), 2)
이렇게 하면 되지 않을까요?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입