Подтвердить что ты не робот

Подключиться в Oracle SQL

Предположим, что мы имеем следующие таблицы

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?
4b9b3361

Ответ 1

CONNECT BY PRIOR empno = manager_id;

Это приведет к рекурсии. Все записи, которые являются частью следующего нижнего иерархического уровня, вернутся. Это вернет иерархию сверху вниз для всех менеджеров и их соответствующих под работающими подчиненными.

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

Ответ 2

Запрос рекурсивный, он начинается с сотрудника # 1 (вероятно, CEO), а затем рекурсивно печатает всех его подчиненных, а затем всех их подчиненных и т.д. и т.д. (пока все сотрудники не будут напечатаны).

Хорошее объяснение "НАЧАТЬ С СОЕДИНЕНИЕМ" можно найти здесь