次のテーブルがあるとします
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;
これは再帰を生成します。 1つ下の階層レベルの一部であるすべてのレコードが返されます。これにより、すべてのマネージャーとその部下の部下の階層が上から下に返されます。
30 (manager_id)
12
5 (manager_id)
1
7
20 (manager_id)
15
10
クエリは再帰的で、従業員#1(おそらくCEO)から始まり、すべての部下を再帰的に印刷し、次にすべての部下などを再帰的に印刷します(すべての従業員が印刷されるまで)。
「START WITH」と「CONNECT BY」についての適切な説明が見つかります here