ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)

一、简介
这个start with … connect by子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。
二、应用场景
用于树的查询,下面是一个组织机构树的案例。该组织机构树设计了三张表ORGANIZATION、WORKER、 ORG_WORKER_REL三张表,其中ORG_WORKER_REL用于反映ORGANIZATION、WORKER之间的映射关系。三张表的数据截图如下:
(1)ORGANIZATION表
ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)_第1张图片
(2)WORKER表
ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)_第2张图片
(3)ORG_WORKER_REL表
ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)_第3张图片
由此可看出,此设计的ORGANIZATION表B树结构为:
ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)_第4张图片
实现方法
问题:如何根据第一事业部的ORGANIZATION_ID获取到其下所有的员工呢?(给出其中一个节点,求其最终子节点或最终父节点)。下面分布来解析实现的思路,如果有员工不属于项目一部、项目二部、项目三部,而是只属于第一事业部,或者是项目一部、项目二部、项目三部下面又分成了多个部门,如下的方法也实现了查询,这也是递归查询的意义。
(1)start with … connect by查询ORGANIZATION
ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)_第5张图片
(2)查询关联表,得到所有的worker_id,注意exists的用法
ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)_第6张图片
(3)关联查询worker表得到需要的用户信息
ORACLE中B树结构查询(start with …… connect by递归用法,同时涉及exists等)_第7张图片

你可能感兴趣的:(数据库)