频道栏目
首页 > 数据库 > Oracle > 正文
oracle树状数据结构查询结果特殊展示
2019-11-18 09:29:30           
收藏   我要投稿


oracle树状数据结构查询结果特殊展示

 

有个数据库表结构设计如下:

   www.firstop.com.cn  

create table DEPT(

ID NUMBER(9) PRIMARY KEY, --部门ID

NAME VARCHAR2(100), --部门名称

PARENT_ID NUMBER(9) --父级部门ID,通过此字段与上级部门关联

);

 

数据如下:

 


 

按照这种查询会出现一个想要的分组结构

   www.firstop.com.cn  

SELECT T.*, ROWNUM

  FROM DEPT T

START WITH T.PARENT_ID = 0

CONNECT BY PRIOR T.ID = T.PARENT_ID



 

具体讲解如下:

 

语法:

select *

from 表名

where 条件1

start with 条件2

connect by prior 当前表字段=级联表字段

start with与connect by prior语句完成递归记录,形成一棵树形结构,通常可以在具有层次结构的表中使用。  www.firstop.com.cn  

start with表示开始的记录

connect by prior 指定与当前记录关联时的字段关系

代码:

--创建部门表,这是一个具有层次结构的表,子记录通过parent_id与父记录的id进行关联 create table DEPT(

ID NUMBER(9) PRIMARY KEY, --部门ID

NAME VARCHAR2(100), --部门名称

PARENT_ID NUMBER(9) --父级部门ID,通过此字段与上级部门关联

);

向表中插入如下数据,为了使代码简单,一个部门仅具有一个下级部门

●从根节点开始查询递归的记录

select *

from dept

start with id=1

connect by prior id = parent_id; 下面是查询结果,start with id=1表示从id=1的记录开始查询,向叶子的方向递归,递归条件是id=parent_id,当前记录的id等于子记录的parent_id ●从叶子节点开始查询递归的记录

select *

from dept

start with id=5

connect by prior parent_id = id;

下面是查询结果,递归条件按照当前记录的parent_id等与父记录的id

●对查询结果过滤

select *  www.firstop.com.cn  

from dept

where name like '%销售%'

start with id=1

connect by prior id = parent_id;

在下面的查询结果中可以看到,首先使用start with... connect by prior查询出树形的结构,然后where条件才生效,对全部查询结果进行过滤

●prior的作用 prior关键字表示不进行递归查询,仅查询出满足id=1的记录,下面是将第一个查询去掉prior关键字后结果

select *

from dept

start with id=1

connect by prior id = parent_id;

 

 

作者 IT4CAT

点击复制链接 与好友分享!回本站首页
相关TAG标签 数据结构 结果
上一篇:oracle返回多结果集
下一篇:oracle job中时间间隔设置
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 第一门户--致力于做实用的IT技术学习网站