1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /* [ 계층형 쿼리 ] : 오라클 DBMS에서만 제공되는 강력한 기능이다. -> 계층적으로 출력되어야하는 경우에 굉장히 유용하다. ex) 스마트폰의 부품 구성도 정보가 저장되어 있는 테이블이 있다 하자 스마트폰 | 메인보드, 디스플레이, 배터리, 카메라 | CPU, Memory 이런식으로 스마트폰아래에 메인보드, 디스플레이, 베터리, 카메라가 있고 메인보드 아래는 또 CPU, Memory가 있는 것처럼 계층형으로 데이터가 저장되어 있는 것이다. 데이터가 이런식으로 저장되어 있으려면 아래와 같이 보통 테이블에 저장되어 있을 것이다. item_id, parent_id, product_name 100 null 스마트폰 101 100 메인보드 102 100 디스플레이 103 100 배터리 104 100 카메라 105 101 CPU 106 101 Memory 107 102 액정 이런식으로 parent_id에 부모에 해당하는 제품의 id를 할당해서 저장되어 있는데 이를 일반적으로는 계층형으로 출력할 수가 없다. 하지만, 오라클에서는 가능하다. start with , connect by 절을 이용한 계층형 쿼리를 이용해서! start with (가장 상위의 root node의 조건) // 위의 예에서는 스마트폰은 parent_id가 null 이다. -> 따라서, start with parent_id IS NULL 로 표현할 수 있다. connect by (계층을 이루는 조건) // -> connect by prior item_id = parent_id 이때, prior 은 item_id의 부모값을 가지고 온다는 의미 -> 따라서 connect by parent_id = prior item_id 로 표현해도 된다. */ // ex) employees테이블은 사원의 employee_id(사번) 정보가 있고 상사의 사번이 manager_id에 저장되어 있다. 이를 이용해 계층형 쿼리를 출력해 보자. select level , emp.employee_id, emp.first_name || emp.last_name 이름, jb.job_title 직책 from employees emp, jobs jb where emp.job_id = jb.job_id start with emp.parent_id IS NULL connect by prior emp.employee_id = emp.parent_id |
'스터디 > DB(ORACLE)' 카테고리의 다른 글
대용량 데이터베이스 솔루션 조광원 선생님 동영상 강의 (19) | 2017.10.28 |
---|---|
ORACLE 비밀번호(password) 관리 (0) | 2017.09.28 |
DB 사용자 관리(생성,변경,삭제) 및 사용자 정보 알아보기 (1) | 2017.09.28 |
ORACLE 인덱스(Index) 개념/종류/주의사항/활용,관리 (0) | 2017.09.27 |
ORACLE 테이블스페이스(table space) -(2) (0) | 2017.09.21 |