web-dev-qa-db-ja.com

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;

このコードは従業員からempnomanager_idenameを選択することを理解しているため、empno=1であるこの行から選択を開始しますが、この行の機能を理解できませんでした。

CONNECT BY PRIOR empno = manager_id;

これは次と同じですか?

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

これは再帰を生成します。 1つ下の階層レベルの一部であるすべてのレコードが返されます。これにより、すべてのマネージャーとその部下の部下の階層が上から下に返されます。

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

クエリは再帰的で、従業員#1(おそらくCEO)から始まり、すべての部下を再帰的に印刷し、次にすべての部下などを再帰的に印刷します(すべての従業員が印刷されるまで)。

「START WITH」と「CONNECT BY」についての適切な説明が見つかります here

5
alfasin