Oracle中Start With的用法

Oracle Start With 关键字

1.问题描述

在主销售品目录模块查询目录节点下的销售品用到此关键字。使用此关键字能够解决层级结构的查询问题。

2. 基本语法

SELECT ... FROM + 表名

WHERE + 条件3 

START WITH + 条件1 

CONNECT BY PRIOR + 条件2

描述:

条件1:
表示从哪个节点开始查找, 也就是通过条件1 查询到的数据, 作为后续查询的起始节点(参数).

当然可以放宽限定条件,如 ID in (‘00001’, ‘00011’)以取得多个根节点,也就是多棵树;在连接关系中,除了可以使用列明外,还允许使用列表达式。

如果省略Start With

就默认把所有满足查询条件的Tree整个表中的数据从头到尾遍历一次,每一个数据做一次根,然后遍历树中其他节点信息.

条件2:
是连接条件,其中用PRIOR表示上一条记录,例如CONNECT BY PRIOR ID = PID,意思就是上一条记录的ID是本条记录的PID,即本记录的父亲是上一条记录。CONNECT BY子句说明每行数据将是按照层次顺序检索,并规定将表中的数据连入树形结构的关系中。

Prior 在父节点的一侧表示, 自底向上查, 在 子节点的一侧表示 自上向下查询;

条件3:
不能用在 Connect By 后, 这里的条件判断, 等价于 在最后查询出结果列表之后, 再进行条件筛选; 并非 删除掉 节点及子节点;

举例
ID, DSC, PID;三个字段, 分别表示 当前标识的 ID(主键), DSC 当前标识的描述, PID 其父级ID, 比较典型的例子 是 国家, 省, 市 这种层级结构;

省份归属于国家, 因此 PID 为 国家的 ID, 以此类推;

--自上向下

 Select * 

From DEMO

Start With ID = '00001'

 --用 Start Wiht PID = '-1' 结果不变 

Connect By Prior ID = PID

--结果 

ID    DSC    PID

00001 中国 -1 

00011 陕西 00001

 00111 西安 00011

 00112 咸阳 00011 

00113 延安 00011 

00012 贵州 00001 

00013 河南 00001

说明

1.查出第一个条件为ID = '00001’的结果:00001 中国 -1
2.

Select * 

From DEMO

Where ID = PID :左边条件为第一步查出来的条件所以为:00001 =PID

所以结果为:00011 陕西 00001

3.循环1、2步直到查出所有

3.其他关键字

nocycle:消除数据本身不合理情况导致的循环。如:中国的ID与PID都为00001时将一直循环。

SIBLINGS: 关键字:它会保护层次,并且在每个等级中按expre排序。

例如:

Select ID, PID, DSC, connect_by_isleaf, LEVEL

From DEMO

Start With ID = '00001' 

Connect By nocycle Prior ID = PID

ORDER SIBLINGS By DSC

相关介绍链接:

https://blog.csdn.net/weiwenhp/article/details/8218091

https://www.cnblogs.com/zyzdisciple/p/7873584.html

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值