메뉴 건너뛰기

조회 수 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;

 


 


  1. 피봇(Pivot)을 이용하여 행(Row)을 열(Column)로 바꾸기

  2. 동적쿼리(Dynamic SQL) 사용법 (텍스트 쿼리)

  3. INSTR 문자열의 뒤(마지막)에서 부터 문자 찾기 (right to left, last)

  4. No Image 08Dec
    by
    2016/12/08 Views 11166 

    실수로 지운 데이터 복구 쿼리 (TIMESTAMP)

  5. No Image 08Dec
    by
    2016/12/08 Views 9087 

    [Oracle|오라클] 한글 초성 검색 함수

  6. No Image 08Dec
    by
    2016/12/08 Views 7358 

    기간내 모든 날자(일자) 구하기

  7. 구분자로 자르기 (Split)

  8. No Image 08Dec
    by
    2016/12/08 Views 7029 

    오늘을 기준으로 해당주(week)의 모든 일자조회

  9. [Oracle SQL] 여러 행(ROW)을 하나의 컬럼(COLUMN)으로 합치기 (WM_CONCAT)

  10. Oracle 11g Client Install 및 외부 클라이언트 도구의 사용

  11. Oracle 11g Database에 외부 접속 허용하도록 설정하기

  12. [Oracle 12] ORA-01950: 테이블스페이스 'USERS'에 대한 권한이 없습니다.

  13. [Oracle 12g] 설치 후 오라클 관리자 계정 접속하기

  14. 날짜관련 계산하기(1)

  15. 계층형 쿼리의 응용 - 답변형 계시판

  16. 계층형 쿼리의 응용 - 달력만들기

  17. No Image 08Dec
    by
    2016/12/08 Views 7078 

    ORA-28001: the password has expired - 추천 실적용 실전

  18. 관리자( SYSTEM, SYS) 계정 비밀번호를 잊어버렸을때..

  19. No Image 08Dec
    by
    2016/12/08 Views 8648 

    오라클 암호 초기화 및 사용자 생성

  20. No Image 08Dec
    by
    2016/12/08 Views 8417 

    오라클 해당 월 의 맨첫날 ~ 마지막 일 가져 오는 쿼리

Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved