Oracle 层次查询(Connect By)
2011-02-04 23:02
741 查看
-引用别人的表结构 create table test_connect_by (child number,parent number); insert into TEST_CONNECT_BY (CHILD, PARENT) values (2, 5); insert into TEST_CONNECT_BY (CHILD, PARENT) values (3, 5); insert into TEST_CONNECT_BY (CHILD, PARENT) values (10, 15); insert into TEST_CONNECT_BY (CHILD, PARENT) values (5, 15); insert into TEST_CONNECT_BY (CHILD, PARENT) values (9, 17); insert into TEST_CONNECT_BY (CHILD, PARENT) values (8, 17); insert into TEST_CONNECT_BY (CHILD, PARENT) values (15, 38); insert into TEST_CONNECT_BY (CHILD, PARENT) values (17, 38); insert into TEST_CONNECT_BY (CHILD, PARENT) values (6, 38); insert into TEST_CONNECT_BY (CHILD, PARENT) values (13, 26); insert into TEST_CONNECT_BY (CHILD, PARENT) values (1, 26); insert into TEST_CONNECT_BY (CHILD, PARENT) values (12, 26); insert into TEST_CONNECT_BY (CHILD, PARENT) values (11, 18); insert into TEST_CONNECT_BY (CHILD, PARENT) values (7, 18); insert into TEST_CONNECT_BY (CHILD, PARENT) values (38, null); insert into TEST_CONNECT_BY (CHILD, PARENT) values (26, null); insert into TEST_CONNECT_BY (CHILD, PARENT) values (18, null); commit; --------------------------------------- select a.child, a.parent, level "层次", sys_connect_by_path(child, '->') "合并层次", prior a.child "父节点", connect_by_root a.child "根节点", decode(connect_by_isleaf, 1, a.child, null) "子节点", decode(connect_by_isleaf, 1, '是', '否') "是否子节点" from test_connect_by a start with a.parent is null --从parent为空开始扫描 connect by prior a.child = a.parent --以child为父列连接parent order siblings by child desc --对层次排序 ; 转贴: http://blog.chinaunix.net/u1/54706/showart_1711812.html
|
2、有如下信息:
起始地 目的地 距离(公里)
A B 1000
A C 1100
A D 900
A E 400
B D 300
D F 600
E A 400
F G 1000
C B 600
请用SQL语句或一段代码写出从A出发,可达到的目的地(包括间接方式)。
创建表test
SQL> select * from test;
START_PLACE END_PLACE DISTANCE
----------- ---------- ----------
A B 1000
A C 1100
A D 900
A E 400
B D 300
D F 600
E A 400
F G 1000
C B 600
select start_place, end_place
from (select * from testwhere end_place <> 'A')
start with start_place = 'A'
connect by prior end_place = start_place;
START_PLACE END_PLACE
----------- ----------
A C
C B
B D
D F
F G
A D
D F
F G
A E
这些条目中的END_PLACE就是所有可以从A到达的点
connect by prior 实现树状查询 connect by prior 左边的为父接点,右边为自接点。
oracle还提供函数sys_connect_by_path()可以把路径表示出来如下面语句
select sys_connect_by_path(start_place, '->')||'->'||end_place
from (select * from duanjw where end_place <> 'A')
start with start_place = 'A'
CONNECT BY PRIOR end_place = start_place;
SYS_CONNECT_BY_PATH(START_PLAC
--------------------------------------------------------------------------------
->A->C
->A->C->B
->A->C->B->D
->A->C->B->D->F
->A->C->B->D->F->G
->A->D
->A->D->F
->A->D->F->G
->A->E
这样看起来就清楚了很多
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoduan9678/archive/2007/07/05/1680261.aspx
相关文章推荐
- Oracle SQL多行字符串拆分使用层次查询(connect by)、正则表达式
- SQL:Oracle层次查询总结 connect by
- Oracle “CONNECT BY” 使用Oracle “CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询。其语法是:
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- oracle层次查询connect by (读书笔记)
- Oracle 层次查询(Connect By)
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- .Net程序员学用Oracle系列(20):层次查询(CONNECT BY)
- Oracle递归层次查询-亲兄弟间的排序ORDER SIBLINGS BY
- Oracle的层次查询及层次查询与自连接的比较
- oracle层次查询的陷阱
- oracle的层次查询
- 【oracle资料整理】--【7】子查询,层次查询,TOP 前几行,分页查询
- PLSQL_基础系列11_递归和层次查询CONNECT BY(案例)
- Oracle兼容之层次查询:层次查询高级特性分析-性能调优
- Oracle 层次查询(递归查询)(level start with connect by prior)
- 深入了解 Oracle 10g 中新型层次查询选项