在ORACLE数据库查询中,我们经常会遇到对树型结构表的查询,这是个麻烦的问题。下面给大家介绍一种SQL语句,实现递归查询
Select * from …. Where [结果过滤条件语句]
Start with [and起始条件过滤语句]
Connect by prior [and中间记录过滤条件语句]
一、Start with.........Connect By 子句
START WITH specifies the root row(s) of the hierarchy.
CONNECT BY specifies the relationship between parent rows and child
rows of the hierarchy. In a hierarchical query, one expression in condition must
be qualified with the PRIOR operator to refer to the parent row。
二、示例
1. 创建测试表:
CREATE TABLE DG_Test
(
D_ID NUMBER, D_NAME VARCHAR2(100 BYTE),
D_PID NUMBER , D_Enabled NUMBER )
2. 插入测试数据:
INSERT NTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(1,'10',0,1);
INSERT
INTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(2,'11',1,1);
INSERT INTO
dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(3,'20',0,1);
INSERT INTO
dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(4,'12',1,1);
INSERT INTO
dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(5,'121',2,1);
INSERT INTO
dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(6,'1215',5,0);
INSERT INTO
dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(7,'1214',4,0);
3. select * from DG_Test
4. 上述单表情况一般用于维护树型结构的应用
从Root往树末梢递归
select * from dg_test
start with D_id=1
connect by prior D_id =
D_pid
从末梢往树ROOT递归
select * from dg_test
start with D_id=7
connect by D_id = prior
D_pid
start with 后面跟着树根,定义了树开始显示的起点位置,如上面两种查询,不管从树根到树顶,还是从树顶到树根。
5. 排除单一体及其分支
select t.* from dg_test t
start with D_id=1
connect by prior D_id =
D_pid
and d_id != 2
这个语句表示从D_id为2的开始,包括后面的子分支,全部排除
注意:这里和where条件的过虑方式不一样,where条件只是把相应的某条不符合要求的记录排除。
分享到:
相关推荐
oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。这篇文章给大家介绍了Oracle递归树形结构查询功能,需要的朋友参考下
递归查询菜单树,支持mysql,oracle,含表结构,递归查询菜单,支持mysql,oracle,含表结构递归查询菜单。
Oracle中的树状查询(递归查询),权限查询,树形结构
Oracle使用递归查询。查询树结构的sql。在Oracle中,递归查询要用到start with ……connect by prior……
在ORACLE、MSSQL、MYSQL中树结构表递归查询的实现.pdf
oracle 如何递归查询父子关系。经常用于构造树结构
oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
有的情况下,我们需要用递归的方法整理数据,这才程序中很容易做到,但是在数据库 ...下面我以最典型的树形结构来说明下如何在Oracle使用递归查 询。 为了说明方便,创建一张数据库表,用于存储一个简单的树形结构
主要给大家介绍了关于Oracle如何通过递归查询父子兄弟节点的相关资料,递归查询对各位程序员来说应该都不陌生,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的...
oracle中的select语句可以用START WITH…CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: 代码如下:select * from tablename start with cond1 connect by cond2 where cond3;...
在不引入MPTT模型的前提下,必须通过递归算法来查询某个节点和下级子节点。 Oracle提供的connect by扩展语法,简单好用。但是其他的RDBMS就没这么人性化了(或者我不知道)。最近在项目中使用PostgreSQL来查询树形...
Startwith...ConnectBy子句递归查询一般用于一个表维护树形结构的应用。 创建示例表:CREATETABLETBL_TEST(IDNUMBER,NAMEVARCHAR2(100BYTE),PIDNUMBERDEFAULT0);插入测试数据:INSERTINTOTBL_TEST(I
Oracle中的select语句可以用START WITH…CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select * from tablename start with cond1 connect by cond2 where cond3; ...
《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...
10.3 递归子查询 273 10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY的功能 277 10.4.1 LEVEL伪列 278 10.4.2 ...
9.4.4 对多表进行union运算 181 9.4.5 union join 连接表 183 9.5 表连接的其他应用及注意问题 183 9.5.1 连接表进行聚合运算 183 9.5.2 多表连接的综合运用 185 9.5.3 多表连接注意事项 186 第10章 子查询 ...