Oracle级联递归查询

一、基础
创建数据表:
-- 区域表
CREATE TABLE sys_district{
	id NUMBER(10) NOT NULL primary key,
	parentid NUMBER(10),
	name VARCHAR2(255 BYTE) NOT NULL
}

向区域表中插入数据:

INSERT INTO sys_district(ID,NAME) VALUES(1,'中国');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(2,1,'贵州');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(3,1,'四川');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(4,2,'遵义');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(5,2,'贵阳');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(6,3,'宜宾');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(7,3,'成都');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(8,4,'道真仡佬族苗族自治县');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(9,6,'高县');

二、查询格式及描述

1、查询格式

SELECT [要查询显示的列] FROM [表名] [WHERE条件语句] [[START WITH [起始查询条件] CONNECT BY [级联关系]] 或 [CONNECT BY [级联关系] START WITH [起始查询条件]]]


2、描述
1)、WHERE条件语句
可缺省,若存在,则级联查询完成后再执行WHERE条件查询。作用可用于对级联查询数据进行筛选。

2)、[级联关系] 如下所示:

PRIOR [id1] = [id2]:以前面已查询数据的id1去关联后面需查询数据的id2进行级联查询。所以,PRIOR [id] = [parentid]表示用前面已查询数据的id字段数据(作为条件参数)去关联表中parentid字段进行查询,即向下级联查询;PRIOR [parentid] = [id]表示用前面已查询数据的parentid字段数据(作为条件参数)去关联表中的id字段进行查询,即向上级联查询。

[id1] = PRIOR [id2]:以前面已查询数据的id2去关联后面需查询数据的id1进行级联查询。所以,[id] = PRIOR [parentid]表示用前面已查询数据的parentid字段数据(作为条件参数)去关联表中的id字段进行查询,即向上级联查询;[parentid] = PRIOR [id]表示用前面已查询数据的id字段数据(作为条件参数)去关联表中parentid字段进行查询,即向下级联查询。

由上述可知,级联查询条件和等号前后放置字段顺序无关,而和PRIOR关键字标记有关。
3)、使用LEVEL
若把级联查询数据看作一颗树,在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。
SELECT ID,NAME,PARENTID,LEVEL FORM SYS_DISTRICT START WITH ID = 1 CONNECT BY PRIOR ID = PARENTID;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值