oracle树形表常用查询

一,表结构如下:



create table area(
id   NUMBER(19) NOT NULL,
parent_id   NUMBER(19) NOT NULL,
name        VARCHAR2(40)
);


二,数据如下:

id parent_id    name
1          0            中国
2          1            江西
3          1            湖南
4          1            湖北
5          2            赣州
6          2            南昌
7          2            九江
8          7            修水
9          7            永修
10         7            武宁
11         7            湖口
12         8            白岭
13         8            全丰
14         8            渣津
15         8            古市

三,查询语句:



1,查询中国所有省份:

select id,parent_id,name from area t where parent_id = 1;
结果如下:
id     parent_id        name
2          1            江西
3          1            湖南
4          1            湖北 


2,查询江西所有的市和镇(乡): (查询某个节点下的所有节点,包括当前节点)

select id,parent_id,name from area t start with id = 2 connect by prior id = parent_id;
结果如下:
id   parent_id    name      
2      1          江西   
5      2          赣州
6      2          南昌
7      2          九江
8      7          修水
9      7          永修
10     7          武宁
11     7          湖口
12     8          白岭
13     8          全丰
14     8          渣津
15     8          古市


3,查询白岭镇(乡)属性哪个省的? (查询某个节点属于哪个父节点下?)

select id,parent_id,name from area t start with id = 12 connect by prior parent_id = id;
上面语句查询出id值为12节点的所有父节点(包括当前节点):
结果如下:
id   parent_id    name  
1      0          中国
2      1          江西
7      2          九江
8      7          修水
12     8          白岭

select id,parent_id,name from (
select id,parent_id,name from area t start with id = 12 connect by prior parent_id = id
) where parent_id = 1
上面语句查询出白岭镇(乡)属性哪个省的.  查询条件:江西的parent_id为1.
结果如下:
id   parent_id    name  
2      1          江西


4,查询递归路径:

select id,parent_id,name,SUBSTR(SYS_CONNECT_BY_PATH(NAME,'->'),2) name_path from area t start with id = 2 connect by prior id = parent_id;

结果如下:
id   parent_id    name      name_path
2      1          江西   
5      2          赣州 江西->赣州
6      2          南昌 江西->南昌
7      2          九江 江西->九江
8      7          修水 江西->九江->修水
9      7          永修 江西->九江->永修
10     7          武宁 江西->九江->武宁
11     7          湖口 江西->九江->湖口
12     8          白岭 江西->九江->修水->白岭
13     8          全丰 江西->九江->修水->全丰
14     8          渣津 江西->九江->修水->渣津
15     8          古市 江西->九江->修水->古市



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值