start with ...connect by的用法

简介:

 
 
  1. Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。  
  2. 创建示例表:  
  3. CREATE TABLE TBL_TEST  
  4. (  
  5. ID NUMBER,  
  6. NAME VARCHAR2(100 BYTE),  
  7. PID NUMBER DEFAULT 0  
  8. );  
  9. 插入测试数据:  
  10. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');  
  11. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');  
  12. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');  
  13. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');  
  14. INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');  
  15. 从Root往树末梢递归  
  16. select * from TBL_TEST  
  17. start with id=1  
  18. connect by prior id = pid  
  19. 从末梢往树ROOT递归  
  20. select * from TBL_TEST  
  21. start with id=5  
  22. connect by prior pid = id  
  23. =====  
  24. 简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:  
  25. id,pid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。  
  26. 用上述语法的查询可以取得这棵树的所有记录。  
  27. 其中:  
  28.  
  29. 条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。  
  30. 条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR id = pid就是说上一条记录的id 是本条记录的pid,即本记录的父亲是上一条记录。  
  31. 条件3 是过滤条件,用于对返回的所有记录进行过滤。  
  32.  
  33.  
  34.  
  35. 简单介绍如下:  
  36.  
  37. 早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:  
  38. 第一步:从根节点开始;  
  39. 第二步:访问该节点;  
  40. 第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;  
  41. 第四步:若该节点为根节点,则访问完毕,否则执行第五步;  
  42. 第五步:返回到该节点的父节点,并执行第三步骤。  
  43.  
  44. 总之:扫描整个树结构的过程也即是中序遍历树的过程。  
  45.  
  46.  
  47. 按照上面给的分析即可对表中的数据构进行分析,以上的方法只适合表中有一棵树的情况。 

 


本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/380296,如需转载请自行联系原作者

相关文章
|
13天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
15 0
|
26天前
|
网络协议 Linux API
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
50 0
|
9月前
End Sub 和 Exit Sub 的区别
End Sub 和 Exit Sub 的区别
85 0
End Sub 和 Exit Sub 的区别
|
Linux 流计算
Flink - 本地执行 Failed to start the Queryable State Data Server
Flink 本地执行任务报错 Failed to start the Queryable State Data Server 以及 Unable to start Queryable State Server. All ports in provided range are occupied. 根据报错分析是因为本地端口被占用,没有足够端口供 Flink 本地客户端启动,所以解决方法就是处理被占用的端口。...
116 0
Flink - 本地执行 Failed to start the Queryable State Data Server
|
关系型数据库 数据库 PostgreSQL
pg_ctl: server did not start in time
postgresql 启动超时异常,可怎么解决
pg_ctl: server did not start in time
start 与 run 区别
start 与 run 区别
116 0
|
SQL 数据库 Windows
MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the W
早晨宁波那边的IT人员打电话告知数据库无法访问了。其实我在早晨也发现Ignite监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情况,就收到了电话。
1870 0
|
SQL 数据库 索引
Using Python to Connect Function Compute to SQL Server
Normally, a third-party module is required for establishing Python-based database connections. To connect to Microsoft SQL Server, pymssql is required.
12596 0