메뉴 건너뛰기

조회 수 8752 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
[참고] 관련 포스트                                                                                                                                                         


계층형 쿼리를 이용한 샘플예제입니다. 실제 프로젝트에서 사용하기위한 쿼리로 적합하지 않습니다.


1
2
3
4
5
6
7
CREATE TABLE TEST_BOARDS (
    ID NUMBER(5) NOT NULL,                   -- ID
    P_ID NUMBER(5) NULL,                     -- 상위 ID값
    SUBJECT VARCHAR2(30) NOT NULL,           -- 게시판 제목
    CONTENT VARCHAR2(100) NULL,              -- 내용 
    CREATE_DATE DATE DEFAULT SYSDATE);       -- 생성일자
 

 

 

 

1
2
3
4
5
6
7
-- 샘플 데이터
INSERT INTO TEST_BOARDS VALUES (1, NULL'테스트1...','테스트합니다',SYSDATE);
INSERT INTO TEST_BOARDS VALUES (2, NULL'테스트2...','테스트합니다',SYSDATE);
INSERT INTO TEST_BOARDS VALUES (3, 1, '답변글 테스트1...','답변글 테스트합니다',SYSDATE);
INSERT INTO TEST_BOARDS VALUES (4, 3, '답변글 테스트2...','답변글 테스트합니다',SYSDATE);
INSERT INTO TEST_BOARDS VALUES (5, 1, '답변글 테스트1...','답변글 테스트합니다',SYSDATE);
INSERT INTO TEST_BOARDS VALUES (6, 2, '공부해요!','재미있게 공부해봅시다.',SYSDATE);

 

 

1
SELECT * FROM TEST_BOARDS;

 

 

 

1
2
3
4
5
6
7
-- 계층형 쿼리 이용
 
SELECT ID, ROWNUM,
             LPAD(' ', 2* (LEVEL-1)) || SUBJECT
 FROM TEST_BOARDS
START WITH P_ID IS NULL
CONNECT BY PRIOR ID = P_ID;

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 리프노드 찾기 ( CONNECT_BY_ISLEAF )
-- 계층형 쿼리에서 해당 로우가 리프노드인지(자식노드가 없는노드인지) 
-- 여부를 체크하여 리프노트에 해당할 경우 1을 그렇지 않을경우 0을 반환
 
-- 해당 게시글의 상위 게시내용은 '[상위글]' 문자를 붙여 표현하였고 실제 클릭했던 
-- 게시판 항목인 ID값이 3인 항목의 게시 내용이 그 아래에 조회
 
SELECT ID, DECODE(CONNECT_BY_ISLEAF, 1, ' '||CONTENT,'[상위글] '||CONTENT||CHR(13)) CONTENTS
FROM TEST_BOARDS
WHERE CONNECT_BY_ROOT ID = 1 -- 루트노드의 ID의 값이 1인것만 조회
START WITH P_ID IS NULL
CONNECT BY PRIOR ID = P_ID
AND ID = 3 -- 클릭한 게시판 항목의 ID값 ( ID값이 3인 항목과 이 항목의 상위 노드를 추출) 
ORDER BY LEVEL;

 

 

 

 

 

 

 

[추가]

 

계층형 쿼리에서는 

제일먼전 START WITH절이 수행 

그 다음에 CONNECT BY 절을 처리

그 다음에 WHERE 절 

 

1
2
3
4
5
6
7
8
-- CONNECT BY 절에 AND 조건을 추가하게 되면 
-- 클릭한 게시판 항목의 ID값 ( ID값이 3인 항목과 이 항목의 상위 노드를 추출) 
-- 또한 P_ID 값이 NULL인 루트노드가 모두 추출된다.
SELECT ID, P_ID, SUBJECT
FROM TEST_BOARDS
START WITH P_ID IS NULL
CONNECT BY PRIOR ID = P_ID
AND ID = 3;

 


 


List of Articles
번호 제목 날짜 조회 수
81 Oracle에서 중복 조인을 피하기 위한 Update 방법 (MERGE 사용) 2016.08.29 8145
80 PK 수정하기 2016.09.12 7069
79 PL/SQL에서 자바(Java) 클래스(Class), 함수 실행 방법 file 2016.12.08 9384
78 RMAN 을 이용한 오라클 백업 2016.12.08 8582
77 ROLLUP 합계, 소계 구하기 (GROUP BY) file 2016.12.08 11869
76 rownum 사용 - 최근글 몇개만 가져오기 2016.12.08 9984
75 rownum 으로 범위지정을 해주고 싶을 때 2016.08.30 8623
74 SQL 작성을 위한 25가지 원칙 2016.12.08 6909
73 SQL 쿼리문 보기 좋게 정렬해주는 사이트 - Instant SQL Formatter file 2016.08.29 10991
72 sqlplus에서 Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법 sqlplus 데이터 insert 입력값 요구 2016.12.08 8911
71 Toad 사용시 캐릭터 인코더 UTF-8 로 변경하기 file 2016.08.30 10077
70 TOAD 에서 Edit 를 통해 sql문을 작성할때 참고해야할 View file 2016.08.30 7468
69 TOAD 에서 SQL Builder 을 사용하여 DML 문서 작성을 자동화 해본다 file 2016.08.30 7505
68 Toad 에서 생성한 테이블의 컬럼위치를 변경하고 싶을 때 Rebuild Table 사용 file 2016.08.30 7604
67 TOAD에서 Explain Plan 보기 2016.09.12 8230
66 UNION ALL 과 ORDER BY 섞어서 쓰기 2016.08.30 9898
65 V$SESSION 테이블 활용 2016.09.12 8119
64 WHERE절에서 Null 값 비교하기 file 2016.08.29 9354
63 WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자. 2016.08.29 8379
62 [Oracle 12g] 설치 후 오라클 관리자 계정 접속하기 file 2016.12.08 10721
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved