Oracle树结构
admin
2023-05-12 01:41:22
0

树结构层次关系即父子关系,类似公司中的部门组织结构树

Oracle树结构

其中总经理是最大的父节点,下面有助理、市场部、行政办、研发部等子节点,而研发部又细分为研发一部和研发二部;

hr用户表employees中的employee_idmanager_idemployee_id表示该雇员的编号,manager_id表示领导该雇员的人的编号,即子节点的manager_id值等于父节点的employee_id值。在表的每一行中都有一个表示父节点的manager_id(除根节点外),通过每个节点的父节点,就可以确定整个树结构。

SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。其命令格式如下:
SELECT 。。。
CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2}
[START WITH]
其中:CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在的一侧表示父节点,另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。

START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根(起始)节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
START WITH:不但可以指定一个根节点,还可以指定多个根节点。

 

学习之前,让我们首先对于树结构章节会使用到的关键词有个概念上的认识和理解!

      prior:优先的

      STARTWITH:指定遍历的起点

     CONNECT BY PRIOR:指定遍历的顺序,比如从上到下,从下到上

     CONNECT BY NOCYCLE PRIOR:不进行循环遍历,可以避免死循环情况的发生

      SYS_CONNECT_BY_PRTH:函数,用于指定层次分隔符

     CONNECT_BY_ISLEAF:函数,返回01两个值,0代表非末级节点,即下面还有子节点;1代表最末级节点,即下面不再有子节点

 

据上面的关键字我们来组合一条sql语句:显示employees表中的用户的隶属关系,类似总经理/副总经理/行政办主任/办事员......

我们使用START WITH语句来指定遍历的源头,即从哪里开始,START WITH可以省略,如果省略则表示所有满足查询条件的行作为根节点

CONNECT BY PRIOR用来指定遍历的顺序,等号的两端连接的是父子关系,即是从老子开始找儿子,还是从儿子开始找老子......

e.employee_id=e.manager_id的意思是:首先找到员工的信息,然后再去找上级是这个员工的,这就是从上至下

关于LEVELLEVEL需要与CONNECT BY 配合使用,表示树状结构的层级,LEVELOracle保留关键字

--1:下面的sql语句是上至下进行员工遍历显示,层次结构使用/进行分割

SQL>SELECTLPAD(' ', 2 * LEVEL - 1) || SYS_CONNECT_BY_PATH(e.last_name, '/') AS path

                                 FROMemployees e

                                 STARTWITH e.manager_id IS NULL

CONNECT BY PRIORe.employee_id = e.manager_id

 

--2:查找由FORDBLAKE 领导的所有雇员的信息。

           SQL>SELECT EMPNOENAMEMGR

                  FROM EMP

                    CONNECT BY PRIOR EMPNO=MGR

                  START WITH ENAME IN(’FORD’,’BLAKE’)

             EMPNO       ENAME        MGR

              ——————————————————————————

             7698            BLAKE         7839

             7499            ALLEN         7698

             7521            WARD          7698

             7654            MARTIN      7698

 

3:树结构结果集中不包含Hartstein的树状关系,我们可以这样实现

SQL>SELECTLPAD(' ', 2 * LEVEL - 1) || SYS_CONNECT_BY_PATH(e.last_name, '/') AS path

                               FROM employees e

                               START WITHe.manager_id IS NULL

CONNECT BY PRIORe.employee_id = e.manager_id

          AND e.last_name <> 'Hartstein'

说明:通过在CONNECT BY 子句后面加AND关键字的方式进行条件筛选


相关内容

热门资讯

俄外交部:对与日方接触持开放态... 当地时间5月14日,就日本政府此前发表的有关日俄关系的言论,俄罗斯外交部发言人扎哈罗娃表示,俄对与日...
打造AI影像协作实验场 上影节... 上海国际电影节全新单元“AI片场”开机 打造AI影像协作实验场 “我做AI电影已经两年了。”德国AI...
我国首次成功批量克隆超高产奶山... 西北农林科技大学14日向新华社记者独家披露,学校羊遗传改良与生物育种创新团队攻克关键核心技术,6只超...
医学院硕博研究生靠虚开发票冒签... 33岁的柴某系江苏人,案发前系某医院博士后研究人员。一审法院认定,2018年至2023年,柴某在某医...
京东618自营电脑桌椅服务升级... 随着京东心动购物季开启,职场人、居家办公族及电竞爱好者的“久坐刚需”升级需求集中释放,电脑桌椅品类迎...
扎波罗热核电站遭乌军袭击,两名... 当地时间5月14日,扎波罗热核电站官方通报称,乌克兰武装部队的无人机对核电站周边区域发动袭击。在距离...
储殷:“建设性稳定关系”涵盖了... 特朗普率高规格代表团访华,中方也是高规格接待。中美今天的互动总体呈现出什么特点?这次元首外交又将如何...
中科信息称目前没有研发具身机器... 瑞财经 严明会 5月13日,中科信息在路演活动中表示,公司目前没有研发具身机器人,现有机器人主要面向...
按下物理AI加速键!香港成全球... 近日,首届香港具身智能产业峰会暨智元APC2026(香港)召开,标志着具身智能从技术炫技正式转向生产...
内塔尼亚胡称将对《纽约时报》提... 新华社耶路撒冷5月14日电(记者庞昕熠 冯国芮)以色列总理办公室14日发表声明称,由于美国《纽约时报...