Oracle中start with…connect by prior子句用法

来源:互联网 发布:ubuntu apt get 卸载 编辑:程序博客网 时间:2024/05/21 14:53

Oracle中start with…connect by prior子句用法

情景:在数据库中经常会遇到查找树状结构的数据。比如一个公司,从高层领导到基层员工,每个人都有自己的员工号(主键id),以及自己的直接领导上司(boss_id),现在需要查找公司的所有员工,并遵守从上到下,从领导到直接下属的树形进行查询。 如A有两个直接下属A1、A2,A1又有直接下属A11、A12,A2又有直接下属A21、A22、A23…现在就需要查询A和他的直接下属,以及他的直接下属的直接下属,直到查询到没有直接下属为止。

找员工:

select * from employee e start with e.id = 'A' connect by  prior e.id = e.boss_id;prior:    英文意思:优先的; 占先的; 在…之前;start with :    表示从e.id = 'A'开始进行查询,表示根节点(最高领导,从A向下查找员工)connect by prior e.id = e.boss_id:    表示父数据的id=子数据的boss_id或    前一条数据的id=本条数据的boss_id

找领导:

select * from employee e start with e.id = 'A23' connect by  e.id = prior e.boss_id;start with :    表示从e.id = 'A23'开始进行查询,表示根节点(从A23开始查找领导)connect by e.id = prior e.boss_id:    表示父数据的boss_id=子数据的id或    前一条数据的boss_id=本条数据的id

难点

其实就是prior关键词的用法(心里想象着这个树状图)上条数据的boss_id = 本条数据的id-----找领导上条数据的id = 本条数据的boss_id-----找员工
原创粉丝点击