【Oracle】树状结构查询

来源:互联网 发布:手机qq视频录像软件 编辑:程序博客网 时间:2024/05/21 02:52
--oracle中的树状结构查询实际上就是一个中序遍历--显示以KING为根节点的树,start with定义起始节点SELECT *FROM   emp aSTART  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;--置于等号前面,由父节点向子节点方向检索;置于等号后面,则从子节点向父节点方向检索SELECT *FROM   emp aSTART  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;--使用伪列level来显示层级关系SELECT *FROM   emp aSTART  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;SELECT level, a.*FROM   emp aSTART  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;--使用函数 sys_connect_by_path 显示全路径SELECT LEVEL, sys_connect_by_path(a.ename, '/'), a.*FROM   emp aSTART  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;--where子句只限定单个节点,不影响子其子节点或者父节点SELECT LEVEL, sys_connect_by_path(a.ename, '/'), a.*FROM   emp aWHERE a.empno <> 7369START  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;--connect by 子句限定整个以当前节点为起始节点的整个分支--connect_by_root 可以在列之前显示最高节点的内容SELECT LEVEL, connect_by_root(a.job),sys_connect_by_path(a.ename, '/'), a.*FROM   emp aWHERE a.empno <> 7369START  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;--connect_by_isleaf 显示当前行是否叶子节点,1:是;0:否SELECT LEVEL, connect_by_isleaf,sys_connect_by_path(a.ename, '/'), a.*FROM   emp aWHERE a.empno <> 7369START  WITH a.empno = 7839CONNECT BY PRIOR a.empno = a.mgr;--connect_by_iscycle 10g中开始有的新特性,用来判断当前节点是否产生了循环,0:否;1:是SELECT LEVEL, connect_by_iscycle, connect_by_isleaf,sys_connect_by_path(a.ename, '/'), a.*FROM   emp aWHERE a.empno <> 7369START  WITH a.empno = 7839CONNECT BY NOCYCLE PRIOR a.empno = a.mgr;

原创粉丝点击