메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
101 linux oracle 서비스 시작 및 확인 ( 간단 ) 2016.09.11 12296
100 ROLLUP 합계, 소계 구하기 (GROUP BY) file 2016.12.08 11869
99 Oracle SQL Developer 도구 활용하기 - Part1 file 2016.12.08 11740
98 Oracle에서 세자리 콤마 찍기 file 2016.08.29 11720
97 Oracle DBMS_CRYPTO 사용하기 - 암복호화 하기 file 2016.12.08 11609
96 Oracle DB 에서 Toad 를 사용하여 Procedure 디버깅 하기 file 2016.08.30 11426
95 Oracle SQL Developer 도구 활용하기 - Part2 file 2016.12.08 11317
94 실수로 지운 데이터 복구 쿼리 (TIMESTAMP) 2016.12.08 11166
93 SQL 쿼리문 보기 좋게 정렬해주는 사이트 - Instant SQL Formatter file 2016.08.29 10991
92 오라클 인스턴스 클라이언트(oracle instant client) 2016.09.12 10980
91 CentOS 6.5 에 Oracle Database 11g Release 2 설치하기 file 2016.12.08 10855
90 [Oracle 12g] 설치 후 오라클 관리자 계정 접속하기 file 2016.12.08 10721
89 oracle log 보기 - alert, trace 2016.09.11 10650
88 [Oracle] Rownum을 이용한 페이징 처리 2016.12.08 10385
87 oracle 10g - log, trc 관리 정책 스크립트 2016.09.11 10088
86 Toad 사용시 캐릭터 인코더 UTF-8 로 변경하기 file 2016.08.30 10077
85 스키마 조회 쿼리 모음 2016.09.12 10036
84 rownum 사용 - 최근글 몇개만 가져오기 2016.12.08 9984
83 오라클 DB 백업과 복원 2016.12.08 9926
82 오라클 웹로직 12.1.3 설치 방법 file 2016.09.21 9902
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved