oracle层次查询
2013-05-30 22:57
218 查看
今天把好久不用的oracle基本又重新复习了一下,今天把层次查询回顾一下.
比如要员工表中查询出是老板的员工(从图上可以看出,是老板的员工分别是1,2,3层的king,jones,blank,clark,ford,scott
该表的数据为
EMPNO ENAME JOB MGR
------ ---------- --------- ----------
7369 SMITH CLERK 7902
7499 ALLEN SALESMAN 7698
7521 WARD SALESMAN 7698
7566 JONES MANAGER 7839
7654 MARTIN SALESMAN 7698
7698 BLAKE MANAGER 7839
7782 CLARK MANAGER 7839
7788 SCOTT ANALYST 7566
7839 KING PRESIDENT
7844 TURNER SALESMAN 7698
7876 ADAMS CLERK 7788
7900 JAMES CLERK 7698
7902 FORD ANALYST 7566
7934 MILLER CLERK 7782
=====================================================
下面进入正题:层次查询是Oracle特有的,1,其中用到关键字 connect ;2,既然是树结构的那么查询的时候就得有个起始顶点。
比如查询出是老板的员工:分析,也就是说empno 要出出在MGR中符合条件。
select level,empno,ename,mgr (level是Oracle提供的一个列号)
from emp
connect by prior empno=mgr
start with mgr is null
order by 1;(order by 1就是按第一列升序)
结果是
LEVEL EMPNO ENAME||'的老板是'||MGR
------- ---------- --------------------------
1 7839 KING的老板是
2 7566 JONES的老板是7839
2 7698 BLAKE的老板是7839
2 7782 CLARK的老板是7839
3 7902 FORD的老板是7566
3 7521 WARD的老板是7698
3 7900 JAMES的老板是7698
3 7934 MILLER的老板是7782
3 7499 ALLEN的老板是7698
3 7788 SCOTT的老板是7566
3 7654 MARTIN的老板是7698
3 7844 TURNER的老板是7698
4 7876 ADAMS的老板是7788
4 7369 SMITH的老板是7902
===========================================
connect by prior是oracle固定写法,start with 是指树的哪个顶结点开始查,当然也查整个树中的某一个小分枝。该话我意思就是说“从mgr 为空的结点开始查”
当然不使用层也可以实现,但是效率没有层次高。
比如要员工表中查询出是老板的员工(从图上可以看出,是老板的员工分别是1,2,3层的king,jones,blank,clark,ford,scott
该表的数据为
EMPNO ENAME JOB MGR
------ ---------- --------- ----------
7369 SMITH CLERK 7902
7499 ALLEN SALESMAN 7698
7521 WARD SALESMAN 7698
7566 JONES MANAGER 7839
7654 MARTIN SALESMAN 7698
7698 BLAKE MANAGER 7839
7782 CLARK MANAGER 7839
7788 SCOTT ANALYST 7566
7839 KING PRESIDENT
7844 TURNER SALESMAN 7698
7876 ADAMS CLERK 7788
7900 JAMES CLERK 7698
7902 FORD ANALYST 7566
7934 MILLER CLERK 7782
=====================================================
下面进入正题:层次查询是Oracle特有的,1,其中用到关键字 connect ;2,既然是树结构的那么查询的时候就得有个起始顶点。
比如查询出是老板的员工:分析,也就是说empno 要出出在MGR中符合条件。
select level,empno,ename,mgr (level是Oracle提供的一个列号)
from emp
connect by prior empno=mgr
start with mgr is null
order by 1;(order by 1就是按第一列升序)
结果是
LEVEL EMPNO ENAME||'的老板是'||MGR
------- ---------- --------------------------
1 7839 KING的老板是
2 7566 JONES的老板是7839
2 7698 BLAKE的老板是7839
2 7782 CLARK的老板是7839
3 7902 FORD的老板是7566
3 7521 WARD的老板是7698
3 7900 JAMES的老板是7698
3 7934 MILLER的老板是7782
3 7499 ALLEN的老板是7698
3 7788 SCOTT的老板是7566
3 7654 MARTIN的老板是7698
3 7844 TURNER的老板是7698
4 7876 ADAMS的老板是7788
4 7369 SMITH的老板是7902
===========================================
connect by prior是oracle固定写法,start with 是指树的哪个顶结点开始查,当然也查整个树中的某一个小分枝。该话我意思就是说“从mgr 为空的结点开始查”
当然不使用层也可以实现,但是效率没有层次高。
相关文章推荐
- Oracle 层次查询、递归
- oracle中层次查询
- Oracle中针对层次数据所设计的专用SQL查询语句
- 用Oracle8的层次查询生成BOM树的实现方法
- 用Oracle8的层次查询生成BOM树的实现方法
- Oracle的层次查询及层次查询与自连接的比较
- oracle层次查询
- oracle 层次查询
- ORACLE 层次查询、目录树节构查询
- ORACLE层次查询学习 level connect by
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- oracle层次查询的陷阱
- Oracle层次查询和分析函数在号段选取中的应用
- oracle层次查询
- oracle层次查询
- Oracle层次查询和分析函数在号段选取中的应用
- oracle:两条sql语句实现层次查询的反序权值计算与输出
- ORACLE 层次结构查询语句 start with connect by prior
- oracle 学习笔记 - 层次查询
- Oracle - 层次查询