首页 / ORACLE / oracle递归查询-个人总结
oracle递归查询-个人总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了oracle递归查询-个人总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2284字,纯文字阅读大概需要4分钟。
内容图文
首先,建表: create table T_TEST_WORD( id NUMBER, pid VARCHAR2(20), name VARCHAR2(20)) 插入数据: insert into T_TEST_WORD (id, pid, name)values (1, '-1', '中国');insert into T_TEST_WORD (id, pid, name)values (2, '1', '江苏');insert into T_
首先,建表:
create table T_TEST_WORD ( id NUMBER, pid VARCHAR2(20), name VARCHAR2(20) )
插入数据:
insert into T_TEST_WORD (id, pid, name) values (1, '-1', '中国'); insert into T_TEST_WORD (id, pid, name) values (2, '1', '江苏'); insert into T_TEST_WORD (id, pid, name) values (3, '1', '浙江'); insert into T_TEST_WORD (id, pid, name) values (4, '2', '南京'); insert into T_TEST_WORD (id, pid, name) values (5, '2', '无锡'); insert into T_TEST_WORD (id, pid, name) values (6, '1', '安徽'); insert into T_TEST_WORD (id, pid, name) values (7, '4', '雨花台区'); insert into T_TEST_WORD (id, pid, name) values (8, '-1', '美国'); insert into T_TEST_WORD (id, pid, name) values (9, '-1', '俄罗斯'); commit;
查询下表中的数据:
表1
其中PID为-1的代表根节点。
开始进行递归查询:
查询结果如下:
表2
说明:
select ... from tablename(表名) where 条件1 start with 条件2 connect by 条件3 and 条件4 ...
看下这个语句(由根节点向子节点查询):
select t.* , level from T_TEST_WORD t start with pid='-1' connect by prior
id = pid(由根节点向子节点查询)
从T_TEST_WORD表中查询所有记录,从pid=-1的开始查询,且上一次查询记录的id作为本次查询的pid,以上表为例,举例如下:
第一次查询出pid=-1的记录是id为1的那条。
第二次查询时,查询pid=1的(上次查询记录的id是1)记录,可以查询到id为2的那条记录
第三次查询时,查询pid=2的(上次查询记录的id是2)记录,可以查询到id为4的那条记录,以此类推......
由上,查询到了表2的记录。
由树的根节点向子节点查询时,查询节点的顺序是按照树的前序遍历(DLR)进行的(1,2,4,7,5,3,6,8,9),如下图1
图1:
(比较丑的图,凑合看吧,嘻嘻)
注意:那个level要有start with ...... connect by ...... 才有效哦,不然会报错的。
再看这句(由子节点向根节点查询):
select t.* ,level from T_TEST_WORD t start with pid='2' connect by id = prior pid
从pid=2的开始(向上)查询,且上一次查询记录的pid作为本次查询的id
prior挨着谁,就将谁作为本次查询的某某关键字,比如connect by id = prior pid,就是将上次的pid作为本次查询的id。
注意,level是伪列,查询数据所对应的级,或者说深度吧。
小菜的总结,有问题请指出,谢谢咯!
内容总结
以上是互联网集市为您收集整理的oracle递归查询-个人总结全部内容,希望文章能够帮你解决oracle递归查询-个人总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。