1、connect by

connect by 用于存在父子,祖孙,上下级等层级关系的数据表进行层级查询。
语法格式:
{ CONNECT BY [ NOCYCLE ] condition [AND condition]… [ START WITH condition ]
| START WITH condition CONNECT BY [ NOCYCLE ] condition [AND condition]…
}
特殊词讲解:
start with: 指定起始节点的条件

connect by: 指定父子行的条件关系

prior: 查询父行的限定符,格式: prior column1 = column2 or column1 = prior column2 and … ,

nocycle: 若数据表中存在循环行,那么不添加此关键字会报错,添加关键字后,便不会报错,但循环的两行只会显示其中的第一条

循环行: 该行只有一个子行,而且子行又是该行的祖先行
connect_by_iscycle: 前置条件:在使用了nocycle之后才能使用此关键字,用于表示是否是循环行,0表示否,1 表示是
connect_by_isleaf: 是否是叶子节点,0表示否,1 表示是
level: level伪列,表示层级,值越小层级越高,level=1为层级最高节点

  1. -- 创建表
  2. create table employee(
  3. emp_id number(18),
  4. lead_id number(18),
  5. emp_name varchar2(200),
  6. salary number(10,2),
  7. dept_no varchar2(8)
  8. );
  9. -- 添加数据
  10. insert into employee values('1',0,'king','1000000.00','001');
  11. insert into employee values('2',1,'jack','50500.00','002');
  12. insert into employee values('3',1,'arise','60000.00','003');
  13. insert into employee values('4',2,'scott','30000.00','002');
  14. insert into employee values('5',2,'tiger','25000.00','002');
  15. insert into employee values('6',3,'wudde','23000.00','003');
  16. insert into employee values('7',3,'joker','21000.00','003');
  17. commit;

image.png
https://www.pianshen.com/article/2898753313/
image.png