스터디/DB(ORACLE) 오라클 계층형 쿼리 고무곰(GomuGom) 2018. 8. 5. 19:34 /* [ 계층형 쿼리 ] : 오라클 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 저작자표시 비영리