oracle查询树信息

oracle查询树信息

项目中经常有树结构,如组织、类别等。一般表中有父节点字段,需要查询类型有:
- 展示整个树
- 显示所有子节点
- 显示所有祖先节点

应用常规的查询,需要查询多次,oracle提供了查询方法,可以非常简洁直接查询,下面通过示例说明。

示例表结构

Employee
-------------
ID (int)
FirstName (varchar)
LastName (varchar)
ParentID (int)
Job (varchar)

employee表,其中 ParentID 表示Employee的管理者。

查询完整树

SELECT *
FROM   Employee
START WITH ParentID IS NULL
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;

查询特定Employee的子节点

无需层次查询,直接给定:parent_id。

SELECT *
FROM   Employee
WHERE  ParentID = :parent_id
ORDER BY LastName, FirstName, ID;

查询所有后代

与查询整个树一致,但需提供绑定变量:parent_id。

SELECT *
FROM   Employee
START WITH ParentID = :parent_id
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;

查询祖先

与前面的类似,但需要CONNECT BY反向查询,无需排序,因为每个Employee只有一个管理者,需指定绑定变量:employee_id。

SELECT *
FROM   Employee
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;

查询员工管理者

与前面一样,但增加LEVEL = 2过滤,仅获取直接父行。指定绑定变量:employee_id。

SELECT e.*
FROM   Employee e
WHERE  LEVEL = 2
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;

总结

利用oracle自带的层级查询,可以提升查询效率,简化查询代码,希望对你有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值