programing

Oracle SQL에서 Connect by

yellowcard 2023. 9. 27. 17:42
반응형

Oracle SQL에서 Connect by

다음 표가 있다고 가정합니다.

create table Employee(
  2    EMPNO         NUMBER(3),
  3    ENAME         VARCHAR2(15 BYTE),
  4    HIREDATE      DATE,
  5    ORIG_SALARY   NUMBER(6),
  6    CURR_SALARY   NUMBER(6),
  7    REGION        VARCHAR2(1 BYTE),
  8    MANAGER_ID    NUMBER(3)
  9  )

그리고.

create table job (
  2    EMPNO         NUMBER(3),
  3    jobtitle      VARCHAR2(20 BYTE)
  4  )
  5  /

아래 쿼리가 하는 일에 관심이 있습니다.

SELECT empno, manager_id, ename
  2  FROM employee
  3  START WITH empno = 1
  4  CONNECT BY PRIOR empno = manager_id;

이 코드는 다음을 선택합니다.empno,manager_id,ename종업원으로부터, 그것은 이 행으로부터 선택을 시작합니다.empno=1, 그러나 이 행이 무엇을 하는지 이해할 수 없었습니다.

CONNECT BY PRIOR empno = manager_id;

다음과 같습니까?

where empno=manager_id?
CONNECT BY PRIOR empno = manager_id;

이렇게 하면 재귀가 발생합니다.다음 하위 계층 레벨의 일부인 모든 레코드가 반환됩니다.이렇게 하면 모든 관리자와 해당 관리자가 일하는 부하 직원들에게 위에서 아래로 계층이 반환됩니다.

30 (manager_id)
   12 
   5 (manager_id)
      1
      7
20 (manager_id)
   15
   10

쿼리는 재귀적이며, 직원 #1(CEO일 가능성이 높음)에서 시작하여 모든 부하 직원을 재귀적으로 인쇄한 다음(모든 직원이 인쇄될 때까지) 모든 부하 직원을 재귀적으로 인쇄합니다.

"START WITH"와 "CONNECT BY"에 대한 좋은 설명은 여기에서 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/11132375/connect-by-in-oracle-sql

반응형