메뉴 건너뛰기

조회 수 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. No Image 12Sep
    by
    2016/09/12 Views 10031 

    스키마 조회 쿼리 모음

  2. 숫자를 문자로 변환 시 소수점 처리 (TO_CHAR, FM)

  3. 숫자 체크 방법 (IS_NUMBER, IS_NUMERIC)

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

  5. 데이터의 암호화 및 복호화

  6. 데이터베이스 백업하기 ( import : 가져오기 , export : 내보내기 )

  7. No Image 29Aug
    by
    2016/08/29 Views 9382 

    단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법

  8. 다른 버전의 오라클 import, export 하기

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

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

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

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

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

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

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

  15. 간단한 쿼리로 일련번호 쉽게 넣기 - ROWNUM 사용

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

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

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

    [Oracle] 테이블 스페이스 및 사용자 계정 생성 방법

  18. No Image 08Dec
    by
    2016/12/08 Views 10385 

    [Oracle] Rownum을 이용한 페이징 처리

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

    [Oracle] DB Export, Import 방법

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

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

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved