oracle学习之:CONNECT BY层次化查询

前端之家收集整理的这篇文章主要介绍了oracle学习之:CONNECT BY层次化查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

层次化查询,顾名思义就是把查询结果有层次的呈现出来。层次化查询结果类似于树状结构,

最顶端的是“根节点”,

下面是“父节点”,

没有子节点的是“叶节点”。

为了让一个或多个表具有层次关系,必须使用相关的字段将表关联起来。比如SCOTT用户下的SCOTT.EMP表中的EMPNO和MGR列。

基本语法为:

[START WITH conditiona1] CONNECT BY condition2

START WITH conditiona1:用来指定根节点,condition1中可以加子查询

CONNECT BY condition2:condition2中必须包含PRIOR关键字,用来指定列是来自父行。PRIOR可以位于比较操作符的任何一方。condition不能包含子查询

如:

打开sql窗口:

SELECT T.EMPNO,T.MGR,T.ENAME,T.HIREDATE
FROM SCOTT.EMP T
START WITH T.MGR IS NULL
CONNECT BY PRIOR T.EMPNO = T.MGR;

EMPNO MGR ENAME HIREDATE

----------------------------------------------------------------------

1 7839 KING 1981/11/17
2 7566 7839 JONES 1981/4/2
3 7788 7566 SCOTT 1987/4/19
4 7876 7788 ADAMS 1987/5/23
5 7902 7566 FORD 1981/12/3
6 7369 7902 SMITH 1980/12/17
7 7698 7839 BLAKE 1981/5/1
8 7499 7698 ALLEN 1981/2/20
9 7521 7698 WARD 1981/2/22
10 7654 7698 MARTIN 1981/9/28
11 7844 7698 TURNER 1981/9/8
12 7900 7698 JAMES 1981/12/3
13 7782 7839 CLARK 1981/6/9
14 7934 7782 MILLER 1982/1/23


为了知道当前查询树状结构所处的层次,可以使用level伪列。加入level伪列后显示如下

SELECT LEVEL,
LPAD(' ',2 * (LEVEL - 1)) || T.ENAME "EmpName",
T.HIREDATE,
T.SAL
FROM SCOTT.EMP T
START WITH T.MGR IS NULL
CONNECT BY T.MGR = PRIOR T.EMPNO;

LEVEL EmpName HIREDATE SAL 1 1 KING 1981/11/17 5000.00 2 2 JONES 1981/4/2 2975.00 3 3 SCOTT 1987/4/19 3000.00 4 4 ADAMS 1987/5/23 1100.00 5 3 FORD 1981/12/3 3000.00 6 4 SMITH 1980/12/17 800.00 7 2 BLAKE 1981/5/1 2850.00 8 3 ALLEN 1981/2/20 1600.00 9 3 WARD 1981/2/22 1250.00 10 3 MARTIN 1981/9/28 1250.00 11 3 TURNER 1981/9/8 1500.00 12 3 JAMES 1981/12/3 950.00 13 2 CLARK 1981/6/9 2450.00 14 3 MILLER 1982/1/23 1300.00

猜你在找的Oracle相关文章