oracle树查询的实现

数据库 Oracle
oracle有很多种查询方式,树查询就是其中之一,下面就让我们一起来了解一下oracle树查询的实现方法和步骤。

oracle树查询又称为递归查询,是最常用的查询方法之一,下文对oracle树查询作了详细的阐述,希望可以让您对oracle树查询有更深的认识。

oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

select * from tablename start with cond1
connect by cond2
where cond3;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。

COND3是过滤条件,用于对返回的所有记录进行过滤。

对于oracle进行简单oracle树查询(递归查询)
DEPTID           NUMBER                   部门id
PAREDEPTID   NUMBER                   父部门id(所属部门id)
NAME              CHAR (40 Byte)    部门名称

通过子节点向根节点追朔.

Ql代码 select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid<SPAN style="FONT-SIZE: small">select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid</SPAN> 
select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

通过根节点遍历子节点.

Ql代码 select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid
<SPAN style="FONT-SIZE: small">select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid</SPAN>  

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

可通过level 关键字查询所在层次.

Ql代码 select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid
<SPAN style="FONT-SIZE: small">select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid</SPAN>  
 

 

 

【编辑推荐】

教您如何删除Oracle重复记录

带您了解Oracle层次查询

带您深入了解Oracle临时表

oracle查询用户所有表的语句

Oracle with语句的用法

责任编辑:段燃 来源: 互联网
相关推荐

2010-10-29 16:41:12

Oracle模糊查询

2010-10-27 16:39:23

oracle查询

2010-10-28 16:52:11

oracle多列子查询

2010-10-27 14:41:45

Oracle查询用户表

2010-09-26 17:09:05

SQL语句

2010-10-27 13:16:41

oracle并行查询

2010-11-18 16:27:37

2010-10-27 17:16:51

Oracle查询

2010-10-28 17:08:11

Oracle查询

2010-04-23 16:35:02

Oracle 查询记录

2010-10-27 16:14:24

Oracle参数查询命

2010-04-06 10:32:12

Oracle递归查询

2010-11-18 13:32:12

Oracle分页查询

2010-10-27 13:54:18

Oracle并行查询

2010-10-27 14:34:56

Oracle日志文件

2010-10-27 16:05:53

oracle查询

2010-10-29 16:48:30

oracle查询所有表

2011-08-30 17:48:48

Oracle数据库日期to_char方式to_date方式

2010-10-28 16:42:04

oracle多表查询

2010-10-27 13:35:15

Oracle查询
点赞
收藏

51CTO技术栈公众号