对于递归查询语法的一些理解

近期的面试过程中发现凡是提到oracle基本都会问一个有关树形结构数据查询的问题。

后经朋友指点知道这种问题一般通过递归查询来解决。

今天自己实践了一下递归查询的使用,经验如下:

1)关键字为START WITH...CONNECT BY PRIOR,可以没有where关键字。

##START WITH 部分条件定义最根的节点,并且抽取结果只会是从最根节点延伸的的节点。(结果可能包括根节点)

比如,START WITH 建德市,那么结果将只会是建德市和淳安镇,START WITH 杭州市则上城下城建德淳安都将被列为抽取结果的对象。

##CONNECT BY PRIOR定义了抽取时递归的连结规则。这里需要注意递归只有到达前面START WITH定义的最根节点才会停止。

举例来说,当我定义START WITH CLM_VALUE='杭州市' CONNECT BY PRIOR CLM_KEY=CLM_SUBKEY的话,淳安的递归结果将会是杭州,而非建德。

2)有一个LEVEL的关键字很有用

假设查询了杭州下属的地区,但是只想要大区,不要镇级(也就是不要淳安),那就可以在where条件中加上level=2。这里杭州的level是1,上城下城建德的level是2,淳安是3。这个字段表示该条数据经过几次递归才找到最根节点。

附:所用TABLE以及数据

  CREATE TABLE "TST_TB" 
   (	"CLM_KEY" NUMBER(2,0), 
	"CLM_SUBKEY" NUMBER(2,0), 
	"CLM_VALUE" CHAR(10 BYTE) DEFAULT '' NOT NULL ENABLE, 
	 CONSTRAINT "PK_TST_TB" PRIMARY KEY ("CLM_KEY")
)

Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (1,null,'杭州市 ');
Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (2,1,'上城区 ');
Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (3,1,'下城区 ');
Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (4,1,'建德市 ');
Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (5,4,'淳安镇 ');
Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (6,null,'上海市 ');
Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (7,6,'嘉定区 ');
Insert into TST_TB (CLM_KEY,CLM_SUBKEY,CLM_VALUE) values (8,7,'江桥镇 ');

ps这是初步实践了一下,以后有深入研究了持续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值