[SQL 교육] 계층형 쿼리(Connect by, Prior)
(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)※ Oracle DB를 사용합니다.
계층형 쿼리에서 Connect by 절을 배우는데 prior를 어느쪽 열에 붙여야 하는지 이해가 겨우 되어서 잊기 전에 정리한다.
employees 테이블에는 employee_id, manager_id 열이 존재한다.
--모든 사원의 관계도를 출력하라. select employee_id, lpad(' ', 3*(level-1))||first_name||' '||last_name, level from employees start with manager_id is null connect by prior employee_id=manager_id order siblings by first_name; --siblings by절에는 열별칭 사용 불가 | |
위의 sql문에서 'start with manager_id is null'이라는 것은 employees 테이블에서 사장은 manager가 없기 때문에 null이다. 그래서 사장부터 시작하겠다는 의미이다.
그러고서 'connect by prior employee_id=manager_id'가 시작점부터 하위계층을 연결시켜주는 부분인데, employee_id에 prior가 붙은 의미는
-> start with에서 시작점 행을 출력했고, 이제 connect by에서 다음 행을 선택을 할 거다. 이때, 다음 행을 기준으로 manager_id가 이전 행의 employee_id와 같은 것을 선택해라.
라는 것이다.
즉, connect by는 다음에 선택 될 행을 기준으로 하고있다. 그래서 prior가 의미하는 것은 현재 출력되는 행을 의미한다.
그래서 'connect by prior employee_id=manager_id'는 현재 출력된 행의 employee_id와 다음의 선택 될 행의 manager_id가 같은 행들을 선택하라는 것이다.
댓글 없음:
댓글 쓰기