Oracle如何实现层次化查询
小编给大家分享一下Oracle如何实现层次化查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
Oracle层次化查询
(1) 树状模型
假如有一个市场模型,其中一级市场是中国,二级市场是省份,三级市场是各个省下面的市,四级市场是各个市下面的县。那么可以创建表market:
createtable market(market_id number(2), market_name varchar2(10),parent_market_id number(2));
insertall
intomarket values(1, 'China', 0)
intomarket values(2, 'Shan Xi', 1)
intomarket values(3, 'Shan Dong', 1)
intomarket values(4, 'Fu Jian', 1)
intomarket values(5, 'Tai Yuan', 2)
intomarket values(6, 'Yang Quan', 2)
intomarket values(7, 'Qi Zhou', 2)
intomarket values(8, 'Qing Dao', 3)
intomarket values(9, 'Ji Nan', 3)
intomarket values(10, 'Yan Tai', 3)
intomarket values(11, 'Xia Men', 4)
intomarket values(12, 'Fu Zhou', 4)
intomarket values(13, 'Quan Zhou', 4)
intomarket values(14, 'Gu Jiao', 5)
intomarket values(15, 'Yang Qu', 5)
intomarket values(16, 'Qing Xu', 5)
select* from dual;
(2) 层次化查询
selectmarket_id, market_name
frommarket
startwith market_name = 'Shan Xi'
connectby prior market_id = parent_market_id;
MARKET_IDMARKET_NAME
----------------------------------------
2 Shan Xi
5 Tai Yuan
14Gu Jiao
15Yang Qu
16Qing Xu
6 Yang Quan
7 Qi Zhou
7rows selected.
这里的搜索规则为:从'ShanXi'节点开始搜索、前一个节点的market_id等于下一个节点的parent_markket_id。
(3) 相关函数
显示搜索路径的函数为
sys_connect_by_path(列名,分隔符)
示例:
selectmarket_id, market_name, sys_connect_by_path(market_name, '/') asmarket_path
frommarket
startwith market_name = 'Gu Jiao'
connectby prior parent_market_id = market_id;
MARKET_IDMARKET_NAM MARKET_PATH
-------------------- ----------------------------------------
14Gu Jiao /Gu Jiao
5 Tai Yuan /Gu Jiao/Tai Yuan
2 Shan Xi /Gu Jiao/Tai Yuan/Shan Xi
1 China /Gu Jiao/Tai Yuan/Shan Xi/China
这里可以利用max()函数来获得完整的路径:
selectmax(sys_connect_by_path(market_name, '/')) market_path
frommarket
startwith market_name = 'Gu Jiao'
connectby prior parent_market_id = market_id;
MARKET_PATH
----------------------------------------
以上是“Oracle如何实现层次化查询”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。