Oracle查询之层次查询示例
2012-11-18 00:20
387 查看
现在有一个需求:
在emp表中查询员工信息: ***的老板是***
如果使用自连接,自然很容易就能查出结果。
sql语句:
所以这时候就需要使用层次查询。
如果将上面的结果组织一下的话,可以得出下面这张图:
可以看出这是一个树,level指树的深度。
在层次查询只能有一张表,并且不再是表和表的连接了,而是同一张表的前后两次操作。从表面上看我们对这张表操作了多次,实际上内部算法只是对这张表操作了一次。
使用层次查询解决这个需求的话,sql语句就是:
在emp表中查询员工信息: ***的老板是***
如果使用自连接,自然很容易就能查出结果。
sql语句:
select e.ename||'的老板是'||b.ename from emp e,emp b where e.mgr=b.empno;结果如下:
E.ENAME||'的老板是'||B.ENAME ---------------------------- FORD的老板是JONES SCOTT的老板是JONES JAMES的老板是BLAKE TURNER的老板是BLAKE MARTIN的老板是BLAKE WARD的老板是BLAKE ALLEN的老板是BLAKE MILLER的老板是CLARK ADAMS的老板是SCOTT CLARK的老板是KING BLAKE的老板是KING E.ENAME||'的老板是'||B.ENAME ---------------------------- JONES的老板是KING SMITH的老板是FORD但是如果这张表有上千万,上亿条记录呢。这时产生的笛卡尔集将会非常大,明显影响系统性能。
所以这时候就需要使用层次查询。
如果将上面的结果组织一下的话,可以得出下面这张图:
可以看出这是一个树,level指树的深度。
在层次查询只能有一张表,并且不再是表和表的连接了,而是同一张表的前后两次操作。从表面上看我们对这张表操作了多次,实际上内部算法只是对这张表操作了一次。
使用层次查询解决这个需求的话,sql语句就是:
select level,empno,ename,mgr from emp connect by prior empno=mgr start with mgr is null order by 1;connect by表示后一次操作的某列值等于前一次操作的某列值,start with指从树的哪个深度或者说哪个节点开始查询。
相关文章推荐
- Oracle层次查询和with函数的使用示例
- Oracle的层次查询及层次查询与自连接的比较
- oracle的层次查询
- Oracle层次查询和分析函数在号段选取中的应用
- SQL:oracle 层次查询 start with connect by
- ORACLE 层次结构查询语句 start with connect by 你用过吗?
- 在Oracle层次查询中给SIBLINGS排序
- ORACLE层次查询学习
- Oracle层次查询
- 用Oracle8的层次查询生成BOM树的实现方法
- ORACLE 层次查询、目录树节构查询
- Oracle层次查询
- oracle层次查询
- oracle 层次查询
- oracle:两条sql语句实现层次查询的反序权值计算与输出
- Oracle中的层次查询详解
- oracle 层次查询判断叶子和根节点
- Oracle 层次查询、递归
- SQL:Oracle层次查询总结 connect by