欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle数据库SQL开发之层次查询

程序员文章站 2022-05-06 23:43:21
...

oracle数据库SQL开发之层次查询

一、自然树结构

如emp表中数据
oracle数据库SQL开发之层次查询
关系树结构
oracle数据库SQL开发之层次查询

二、层次查询

语法结构:

select [level], column, expr...
from table
[where condition(s)]
[start with condition(s)]
[connect by prior column1=column2] ;

level:节点的层次,伪列,由查询的起点开始算起为1,依次类推。
– from table:指定表、视图或包含列的快照,你只能从单独的一个表中选择。
–where: 限制返回的行。
– condition(s):是一个比较式。
start with :**指定层次的根行 (起点)。**这个子句对于一个正确的分级查询是必须的。
connect by prior指定存在父与子行的关系列。对于分级查询该子句是必须的。

connect by prior 语句中的
oracle数据库SQL开发之层次查询
emp员工表中经理号mgr、员工号empno
从顶向下

select empno, ename, job, mgr
from emp
start with ename = 'KING'
connect by prior empno = mgr;--parent key = child key:经理的员工编号=员工的经理编号

从底向上

select empno, ename, job, mgr
from emp
start with empno=  7876
connect by prior mgr = empno;--child key=parent key:员工的经理编号=经理的员工编号

三、修剪分枝

1.用 where 子句中条件去除一个结点
where ename <>'Higgins’
oracle数据库SQL开发之层次查询
2.用 connect by 子句中条件去除一个分支
…connect by prior empno = mgr and ename <> ‘Higgins’
oracle数据库SQL开发之层次查询