当前位置:  数据库>oracle

Oracle层次查询技巧

    来源: 互联网  发布时间:2017-04-14

    本文导语: Oracle层次查询技巧 create table emp_hire as selectempno,mgr,ename from emp select * from emp_hire EMPNO MGR ENAME 5555 7900 ggg 7369 7902 SMITH 7499 7698 ALLEN 7521 7698 WARD 7566 7839 JONES 7654 7698 MA & RTIN 7698 7839 BLAKE 7782 7839 CLARK 7788 7566 ...

Oracle层次查询技巧

create table emp_hire as

selectempno,mgr,ename from emp

select * from emp_hire

EMPNO

MGR

ENAME

5555

7900

ggg

7369

7902

SMITH

7499

7698

ALLEN

7521

7698

WARD

7566

7839

JONES

7654

7698

MA & RTIN

7698

7839

BLAKE

7782

7839

CLARK

7788

7566

SCOTT

7839

KING

7844

7698

TURNER

7900

7698

JAMES

7902

7566

FORD

7934

7782

MILLER

7876

7788

ADAMS

 

这些数据存在着层次关系

select

   lpad('*',level,'*')||e.ename ename,

   e.empno,

   mgr fa_id,

   (select ename from emp_hire where empno=e.mgr) fa_name

from emp_hiree

   START WITH MGR IS NULL

   CONNECT BY PRIOR EMPNO = MGR

 

ENAME

EMPNO

FA_ID

FA_NAME

*KING

7839

**JONES

7566

7839

KING

***SCOTT

7788

7566

JONES

****ADAMS

7876

7788

SCOTT

***FORD

7902

7566

JONES

****SMITH

7369

7902

FORD

**BLAKE

7698

7839

KING

***ALLEN

7499

7698

BLAKE

***WARD

7521

7698

BLAKE

***MA & RTIN

7654

7698

BLAKE

***TURNER

7844

7698

BLAKE

***JAMES

7900

7698

BLAKE

****ggg

5555

7900

JAMES

**CLARK

7782

7839

KING

***MILLER

7934

7782

CLARK

 
 
 
其中
start with -- this identifies all LEVEL=1 nodes in the tree
 
connect by -- describes how to walk from the parent nodes above to their children and their childrens children.

 

层次是一棵树, 又如同一个家族图谱

 Oracle层次查询技巧[图片]

每一个子节电只有一个父节点;

每一个分支,最末端是叶节点;

 

SELECT

ename  Employee,

CONNECT_BY_ISLEAF  IsLeaf,

LEVEL lev,

SYS_CONNECT_BY_PATH(ename, '/')  Path

FROM emp

   START WITH MGR IS NULL

   CONNECT BY PRIOR EMPNO = MGR

 

EMPLOYEE

ISLEAF

LEV

PATH

KING

0

1

/KING

JONES

0

2

/KING/JONES

SCOTT

0

3

/KING/JONES/SCOTT

ADAMS

1

4

/KING/JONES/SCOTT/ADAMS

FORD

0

3

/KING/JONES/FORD

SMITH

1

4

/KING/JONES/FORD/SMITH

BLAKE

0

2

/KING/BLAKE

ALLEN

1

3

/KING/BLAKE/ALLEN

WARD

1

3

/KING/BLAKE/WARD

MA & RTIN

1

3

/KING/BLAKE/MA & RTIN

TURNER

1

3

/KING/BLAKE/TURNER

JAMES

0

3

/KING/BLAKE/JAMES

ggg

1

4

/KING/BLAKE/JAMES/ggg

CLARK

0

2

/KING/CLARK

MILLER

1

3

/KING/CLARK/MILLER

 

 

 

检查一个层次是否存在闭循环

CONNECT_BY_ISCYCLE

 

找出根节点

CONNECT_BY_ROOT

 

SELECT

ename  Employee,

CONNECT_BY_ISCYCLE,

CONNECT_BY_ROOT ename

FROM emp

   START WITH MGR IS NULL

   CONNECT BY NOCYCLE PRIOR EMPNO = MGR

EMPLOYEE

CONNECT_BY_ISCYCLE

CONNECT_BY_ROOTENAME

KING

0

KING

JONES

0

KING

SCOTT

0

KING

ADAMS

0

KING

FORD

0

KING

SMITH

0

KING

BLAKE

0

KING

ALLEN

0

KING

WARD

0

KING

MA & RTIN

0

KING

TURNER

0

KING

JAMES

0

KING

ggg

0

KING

CLARK

0

KING

MILLER

0

KING

 

 

层次查询的过滤条件

SELECT

ename  Employee,

CONNECT_BY_ISLEAF  IsLeaf,

LEVEL lev,

SYS_CONNECT_BY_PATH(ename, '/')  Path

FROM emp

where level


    
 
 

您可能感兴趣的文章:

  • Oracle层次查询和with函数的使用示例
  • oracle 层次化查询(行政区划三级级联)
  • oracle查询不含括号及不含指定字符的方法 iis7站长之家
  • 技巧分享 删除Oracle10G中的垃圾表
  • Oracle 数据库操作技巧集
  • [小技巧]手工扩大Oracle数据库表空间的方法
  • Oracle认证的技巧
  • Oracle技巧分享
  • ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
  • 小技巧 Oracle杀死死锁进程问题的解决
  • 技巧学习 在Python环境下连接Oracle数据库
  • Oracle 建立临时表语法及使用技巧
  • 技巧分享 Oracle数据库的启动和关闭
  • Oracle Form中COMMIT的概述及使用技巧
  • Hibernate Oracle sequence的使用技巧
  • 保持Oracle数据优良性能的技巧分享
  • oracle数据库自动备份技巧
  • oracle—SQL技巧之(一)连续记录查询sql案例测试
  • Oracle数据库的空间管理技巧
  • oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起
  • oracle 索引的相关介绍(创建、简介、技巧、怎样查看) .
  • Oracle数据库中的字符处理技巧总结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle查询出现异常
  • Oracle将查询的结果放入一张自定义表中并再查询数据
  • oracle+jsp 多用户查询系统讨论:
  • Oracle查询表、视图、序列等信息查询
  • 关于Oracle的查询问题
  • Oracle用什么语句查询字段?
  • Oracle 查询指定表名的columns
  • linux下通过对文件读取方式查询oracle的版本信息
  • Oracle的大数据量查询结果显示问题。(高手帮忙)
  • Oracle对两个数据表交集的查询
  • Oracle数据库并行查询出错的解决方法
  • Oracle 合并查询
  • 查询与修改Oracle字符集
  • 紧急求救:jsp对Oracle数据库中long 型数据进行模糊查询 如何查?
  • oracle通过行范围查询取4至10行
  • mysql仿oracle的decode效果查询
  • Oracle中查询本月星期5的所有日期列表的语句
  • jsp中在oracle中查询日期类型时sql语句该怎么写啊?
  • 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查?
  • oracle查询不含括号及不含指定字符的方法
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 虚拟机装Oracle R12与Oracle10g
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3