ITPub博客

首页 > 数据库 > Oracle > 数据库开发基础---层次查询

数据库开发基础---层次查询

原创 Oracle 作者:lff1530983327 时间:2015-01-04 17:12:39 0 删除 编辑

 

---公交站点,从A站点开始,能够到达哪些站点?

create table bus(

    dstart varchar2(4),

    dend varchar2(4)

);

insert into bus values('A','B');

insert into bus values('B','C');

insert into bus values('A','D');

insert into bus values('D','M');

insert into bus values('C','E');

insert into bus values('F','M');

commit;

-----要求:将路线列示出来

select * from bus;

层次查询基本语法:

select [level], column, expr...from table [where condition] start with condition

connect by [prior column1= column2 | column1 = prior column2];

level

---可以查询出scott这个员工的上级领导

select level,

       empno,

       ename,

       mgr,

       CONNECT_BY_ROOT ename,

       SYS_CONNECT_BY_PATH(ename, '/')

  from emp

 start with ename is not null

connect by prior empno = mgr;

 

 

-----SYS_CONNECT_BY_PATH这个函数是oracle9i才新提出来的!它一定要和connect by子句合用!第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符!

-----START WITH 代表你要开始遍历的的节点!

----CONNECT BY PRIOR 是标示父子关系的对应!CONNECT_BY_ROOT通过这个操作,可以获取树形查询根记录的字段 ,实现树状查询 左边的为父接点,右边为自接点

----CONNECT_BY_ROOT是指以ename为根向后进行遍历,所遍历到的上一层

SELECT level,ename "Employee", CONNECT_BY_ROOT ename "Manager",CONNECT_BY_ISLEAF isleaf,

   LEVEL-1 "Pathlen", SYS_CONNECT_BY_PATH(ename, '/') "Path"

   FROM emp

   start with ename IS NOT NULL   -------可以查询哪一位员工下属员工具体有哪些人

   CONNECT BY PRIOR  empno = mgr

   ORDER BY "Employee",level, "Manager", "Pathlen", "Path";

通过以上例子就很容易得到公交路线查询思路如下:

select dstart,dend,row_number()over(partition by dstart order by null) rn1,row_number()over(partition by dend order by null) rn2 FROM BUS;

---方法一:

select dstart, wmsys.wm_concat(dend)  from bus group by dstart---可以列示出所有已起点可以到达的终点站

---方法二:

select dstart,dend, CONNECT_BY_ISLEAF isleaf,

sys_connect_by_path(dstart, '->')||'-'||dend "Path"

FROM bus

START WITH dstart IS NOT NULL

CONNECT BY PRIOR  dend =dstart;

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30018455/viewspace-1389698/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-11-12

  • 博文量
    72
  • 访问量
    49744