oracle树查询

Oracle结构查询(图) NULL 博文链接:https://wmcxy.iteye.com/blog/797343 立即下载


我们用一张简单的表COMP_INFO来存储单位信息,包含上下级隶属关系,如下三列,分别为单位ID,单位名称,上级单位ID

CREATE TABLE COMP_INFO

(

  COMP_ID      VARCHAR2(5 BYTE)                 NOT NULL,

  COMP_NAME    VARCHAR2(80 BYTE)                NOT NULL,

  HIGHER_COMP  VARCHAR2(5 BYTE)

)

TABLESPACE USERS

PCTUSED    0

PCTFREE    10

INITRANS   1

MAXTRANS   255

STORAGE    (

            INITIAL          64K

            MINEXTENTS       1

            MAXEXTENTS       2147483645

            PCTINCREASE      0

            BUFFER_POOL      DEFAULT

           )

LOGGING

NOCACHE

NOPARALLEL

NOMONITORING;

插入初始数据:

INSERT INTO COMP_INFO VALUES('10000','XX公司','');

INSERT INTO COMP_INFO VALUES('11000','XX公司英国公司','10000');

INSERT INTO COMP_INFO VALUES('12000','XX公司中国公司','10000');

INSERT INTO COMP_INFO VALUES('13000','XX公司日本公司','10000');

INSERT INTO COMP_INFO VALUES('12100','XX公司中国公司北京研究中心','12000');

INSERT INTO COMP_INFO VALUES('12200','XX公司中国公司上海办事处','12000');

INSERT INTO COMP_INFO VALUES('12110','XX公司中国公司北京研究一所','12100');

INSERT INTO COMP_INFO VALUES('12120','XX公司中国公司北京研究二所','12100');

INSERT INTO COMP_INFO VALUES('12130','XX公司中国公司北京研究三所','12100');

INSERT INTO COMP_INFO VALUES('12140','XX公司中国公司北京研究四所','12100');

我们先查询一下select * from COMP_INFO

COMP_ID

COMP_NAME

HIGHER_COMP

10000

XX公司

 

11000

XX公司英国公司

10000

12000

XX公司中国公司

10000

13000

XX公司日本公司

10000

12100

XX公司中国公司北京研究中心

12000

12200

XX公司中国公司上海办事处

12000

12110

XX公司中国公司北京研究一所

12100

12120

XX公司中国公司北京研究二所

12100

12130

XX公司中国公司北京研究三所

12100

12140

XX公司中国公司北京研究四所

12100

 

 

树查询语句的语法如下

SELECT [LEVEL], column, expr...

FROM table

[WHERE condition(s)]

[START WITH condition(s)]

[CONNECT BY PRIOR condition(s)]

接下来进行一些实际查询练习:(顶——底)

1、   查询整整个树的层次结构

select LPAD(' ',8*(LEVEL-1))||(select b.comp_name as from comp_info b where b.comp_id=a.higher_comp) 上级单位,

a.comp_name 单位名称 from comp_info a

start with higher_comp is null

connect by PRIOR comp_id=  higher_comp

结果:

上级公司

公司名称

 

XX公司

        XX公司

XX公司英国公司

        XX公司

XX公司中国公司

                XX公司中国公司

XX公司中国公司北京研究中心

                        XX公司中国公司北京研究中心

XX公司中国公司北京研究一所

                        XX公司中国公司北京研究中心

XX公司中国公司北京研究二所

                        XX公司中国公司北京研究中心

XX公司中国公司北京研究三所

                        XX公司中国公司北京研究中心

XX公司中国公司北京研究四所

                XX公司中国公司

XX公司中国公司上海办事处

        XX公司

XX公司日本公司

 

2、查询北京研究中心及下属单位:(顶——底)

select LPAD(' ',8*(LEVEL-1))||(select b.comp_name as from comp_info b where b.comp_id=a.higher_comp) 上级单位,

a.comp_name 单位名称 from comp_info a

start with comp_id='12100'

connect by PRIOR comp_id=  higher_comp

结果:

上级公司

公司名称

XX公司中国公司

XX公司中国公司北京研究中心

        XX公司中国公司北京研究中心

XX公司中国公司北京研究一所

        XX公司中国公司北京研究中心

XX公司中国公司北京研究二所

        XX公司中国公司北京研究中心

XX公司中国公司北京研究三所

        XX公司中国公司北京研究中心

XX公司中国公司北京研究四所

 

3、   查询北京研究中心的上溯单位:(底——顶)

select LPAD(' ',8*(LEVEL-1))||(select b.comp_name as from comp_info b where b.comp_id=a.higher_comp) 上级单位,

a.comp_name 单位名称 from comp_info a

start with comp_id='12100'

connect by higher_comp= PRIOR  comp_id

结果:

上级公司

公司名称

XX公司中国公司

XX公司中国公司北京研究中心

        XX公司

XX公司中国公司

               

XX公司

 

4、   查询北京研究中心的下属单位:(顶——底)

select LPAD(' ',8*(LEVEL-1))||(select b.comp_name as from comp_info b where b.comp_id=a.higher_comp) 上级单位,

a.comp_name 单位名称 from comp_info a

start with higher_comp='12100'

connect by PRIOR  comp_id= higher_comp

 

结果:

上级公司

公司名称

XX公司中国公司北京研究中心

XX公司中国公司北京研究一所

XX公司中国公司北京研究中心

XX公司中国公司北京研究二所

XX公司中国公司北京研究中心

XX公司中国公司北京研究三所

XX公司中国公司北京研究中心

XX公司中国公司北京研究四所

 

5、   查询二级单位为北京研究中心的单位的上溯单位:(底——顶)

select LPAD(' ',8*(LEVEL-1))||(select b.comp_name as from comp_info b where b.comp_id=a.higher_comp) 上级单位,

a.comp_name 单位名称 from comp_info a

start with higher_comp='12100'

connect by comp_id=PRIOR higher_comp

结果:

上级公司

公司名称

XX公司中国公司北京研究中心

XX公司中国公司北京研究一所

        XX公司中国公司

XX公司中国公司北京研究中心

                XX公司

XX公司中国公司

                       

XX公司

XX公司中国公司北京研究中心

XX公司中国公司北京研究二所

        XX公司中国公司

XX公司中国公司北京研究中心

                XX公司

XX公司中国公司

                       

XX公司

XX公司中国公司北京研究中心

XX公司中国公司北京研究三所

        XX公司中国公司

XX公司中国公司北京研究中心

                XX公司

XX公司中国公司

                       

XX公司

XX公司中国公司北京研究中心

XX公司中国公司北京研究四所

        XX公司中国公司

XX公司中国公司北京研究中心

                XX公司

XX公司中国公司

                       

XX公司

 

Oracle 操作(SQL查询状菜单) 立即下载

相关推荐

oracle 查询 语句

格式: SELECT column FROM table_name START WITH column=value CONNECT BY PRIOR 父主键=子外键 select lpad(‘ ‘,4*(level-1))||name name,job,id,super from emp start with super is null connect by prior id=super 例子: 原始数据:select no,q from a_example2 NO NAME ———- —————————— 001 a01 001 a02 001 a03 001 a04 001 a05 002

ORACLE结构查询

这里我们以一张简单的行政区划表为例进行展示,在实际使用过程中,可以为其添加其他描述字段以及层级。条件3---链接条件,目的就是给出父子之间的关系是什么,根据这个关系进行递归查询(在上述表中就是ID=PID)条件2---根节点的限定条件,固然也可以放宽权限得到多个根节点,也就是获取多个。2、查询青岛市的下一级子节点(注意和上面区分,全部子节点和下一级子节点)说明:条件1---过滤条件,对全部返回的记录进行过滤。其中ID为1的为山东省节点,查询结果如下。1、查询山东省下面的所有子节点。

紫夜的博客 1922

Oracle中的查询及伪列

Oracle中的查询及伪列

m0_71406734的博客 5256

oracle形结构查询递归查询

是一种在关系型数据库中处理递归查询的语法。 假设我们有一个形结构数据表 , 包含节点的 ID、父节点的 ID 和节点名称等字段。示例表数据: 示例查询查询 ID 为 2 的节点及其子节点的信息。执行以下查询语句: 查询结果: 语句用于执行递归查询,它可以在查询过程中不断地迭代自身,处理具有递归关系的数据。通过递归查询,我们可以处理形结构、层次关系等复杂数据结构。 语句的执行方式主要包括以下几个步骤:在 语句中,我们首先定义一个递归公共表表达式

qq_36521848的博客 2055

PLSQL 查询语法level

查询 又叫层次查询 查询通常由根节点、父节点、 子节点、叶子结点组合 根节点:当前节点之上没有其他节点的 叶子节点:当前节点之下没有其他节点的 父节点:当前节点之下有其他节点的 子节点:当前节点之上有其他节点的 level 节点深度 查询的函数 1.sys_connect_by_path(列,分隔符) 合并层级 2.connect_by_root 列 返回根节点 3.connect_by_isleaf 判断是否为叶子节点 查询的语法 select from [...

Tapyou的博客 1413

oracle 递归查询(结构

【代码】oracle 递归查询(结构

weixin_42023748的博客 1304

Oracle查询总结

一、简介 在实际项目中,经常会遇到各种级联选择器、各种多级菜单等等,这些数据通常都要在前端展示,在oracle中提供了查询语法,可以很方便的实现查找父子节点、子父节点、祖父节点等等。 要实现查询,需要用到如下语句: select … from 数据表名称 start with 条件1 --遍历开始节点 connect by 条件2 --连接条件 where 条件3; --对...

weixiaohuai的博客 1515

Oracle查询及函数

Oracle查询的最重要的就是select...start with... connect by...prior语法了。依托于该语法,我们可以将一个表形结构的中以的顺序列出来。在下面列述了Oracle查询的常用查询方式以及经常使用的与查询相关的Oracle特性函数等,在这里只涉及到一张表中的查询方式而不涉及多表中的关联等。       以我做过的一个项目中的表为例,表结构如下:

一个人的博客 1万+

oracle数据库怎么进行查询,oracle查询的实现

oracle查询的实现来自于网络:oracle查询又称为递归查询,是最常用的查询方法之一,下文对oracle查询作了详细的阐述,希望可以让您对oracle查询有更深的认识。oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:select * from tablename ...

weixin_34577766的博客 2282

oracle 查询语句,oracle 查询 语句

oracle 查询 语句更新时间:2009年07月17日 01:06:31 作者:oracle 查询,需要的朋友可以参考下,代码有点乱不好意思啊格式:SELECT columnFROM table_nameSTART WITH column=valueCONNECT BY PRIOR 父主键=子外键select lpad(' ',4*(level-1))||name name,job,id...

weixin_42350606的博客 184

Oracle查询

Oracle 操作(select…start with…connect by…prior) oracle查询的最重要的就是select…start with…connect by…prior语法了。依托于该语法,我们可以将一个表形结构的以的顺序列出来。在下面列述了oracle查询的常用查询方式以及经常使用的与查询相关的oracle特性函数等,在这里只涉及到一张表中的查询方式而

u013495872的专栏 498

Oracle 查询

Oracle 查询一、的定义 是一种包括祖父节点、父节点、子节点、孙节点的一种数据结构。通常定义为具有n个节点的有限集合。 度是的节点的一种分类, 节点的度:一个节点拥有的子节点即成为节点的度,比如A节点,有B和C两个子节点,那么A节点的度=2。 节点间关系 子节点:某一个节点的子节点称为孩子节点。比如B、C节点是A节点的孩子节点。 父节点:与孩子节点相反

paul50060049的专栏 569

Oracle查询及相关函数

Oracle查询及相关函数 Oracle查询的最重要的就是select…start with… connect by …prior 语法了。依托于该语法,我们可以将一个表形结构的中以的顺序列出来。在下面列述了Oracle查询的常用查询方式以及经常使用的 与查询相关的Oracle特性函数等,在这里只涉及到一张表中的查询方式而不涉及多表中的关联等。 以我做过的一个项目中的表为例,表结构...

Ryze 371

oracle查询的原理,oracle查询的实现

oracle查询又称为递归查询,是最常用的查询方法之一,下文对oracle查询作了详细的阐述,希望可以让您对oracle查询有更深的认识。oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:select * from tablename start with cond1co...

weixin_30013175的博客 242
上一篇: 杂谈
下一篇: 测测自己是个什么人才
eigo
博客等级 码龄22年 17粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值