Oracle 계층형 쿼리

Walter Mitty·2023년 2월 2일
0

계층형 쿼리 참고자료

  • 리버스 엔지니어링 :
  • 포워드 엔지니어링 : 테이블을 만들고 이 테이블들과의 관계를 설계를 해서 ERD를 그리고 이 테이블과의 관계를 포워드 엔지니어링하면 알아서 해당 계정이 생긴다.

현업에서는 eXERD도 쓰지만, ErWin 이라는 소프트웨어를 쓰기도 한다.
-> 테이블간의 관게를 보기도 싶고, ERD를 만들기 쉽다는 장점이있다.


  • hr계정의 employees 테이블은 자기참조를 하는 관계이다.
    • 자기참조의 관계의 선은 employee_id 컬럼과 emp_manager 컬럼이 참조를 하는 경우이다.
      • 정확히 말하면 emp_manager가 employee_id를 참조하는 경우이다.
employee_idemp_manager first name
100steven
101A
102B
103C
103B

원래는 이런데,

employee_idemp_manager first name
100steven
101A
103C
102B

이렇게 출력하고 싶다면, 자기 참조관계에 관련된 계층형 쿼리를 만들면된다.
*SQL D 시험볼거면 이거 꼭 알아야함.

  • 100번 사원의 관리자는 없다 = 최고경영자.


    여기서
  • 계층형 쿼리의 start with (시작점)을 null로하겠다.
    • 여기서 주의할 점은 = null 이아니라 is null을 써야한다!!
      select employee_id, first_name, manager_id
      from employees
      START WITH manager_id is null
      CONNECT BY PRIOR employee_id = manager_id;
      현재 한행의 employee_id 를 manager_id로 가지고 있는 행을 찾아라
  • 108번이 중복되는 이유는 109번에서 108번인건 맞는데, 110번이 원래 109가 되어야 맞지만 108이다. 그러면 거기서 노드가 끝나고 다시 윗 레벨인 109번으로 갔는데 또 108, 그래서 그 윗세벨인 108번으로 올라가서 비교, 또 비교 하다가 113번에서 또 노드가 끝나서 상위레벨인 108번으로 올라가고, 비교하는데 또 일치하는 행이 없어서 윗 레벨인 101번으로 올라가서 비교를 하게된다.

0개의 댓글