有个数据库表结构设计如下:
create table DEPT(
ID NUMBER(9) PRIMARY KEY, --部门ID
NAME VARCHAR2(100), --部门名称
PARENT_ID NUMBER(9) --父级部门ID,通过此字段与上级部门关联
);
数据如下:
按照这种查询会出现一个想要的分组结构
SELECT T.*, ROWNUM
FROM DEPT T
START WITH T.PARENT_ID = 0
CONNECT BY PRIOR T.ID = T.PARENT_ID
具体讲解如下:
语法:
select *
from 表名
where 条件1
start with 条件2
connect by prior 当前表字段=级联表字段
start with与connect by prior语句完成递归记录,形成一棵树形结构,通常可以在具有层次结构的表中使用。
start with表示开始的记录
connect by prior 指定与当前记录关联时的字段关系
代码:
--创建部门表,这是一个具有层次结构的表,子记录通过parent_id与父记录的id进行关联 create table DEPT(
ID NUMBER(9) PRIMARY KEY, --部门ID
NAME VARCHAR2(100), --部门名称
PARENT_ID NUMBER(9) --父级部门ID,通过此字段与上级部门关联
);
向表中插入如下数据,为了使代码简单,一个部门仅具有一个下级部门
●从根节点开始查询递归的记录
select *
from dept
start with id=1
connect by prior id = parent_id; 下面是查询结果,start with id=1表示从id=1的记录开始查询,向叶子的方向递归,递归条件是id=parent_id,当前记录的id等于子记录的parent_id ●从叶子节点开始查询递归的记录
select *
from dept
start with id=5
connect by prior parent_id = id;
下面是查询结果,递归条件按照当前记录的parent_id等与父记录的id
●对查询结果过滤
select *
from dept
where name like '%销售%'
start with id=1
connect by prior id = parent_id;
在下面的查询结果中可以看到,首先使用start with... connect by prior查询出树形的结构,然后where条件才生效,对全部查询结果进行过滤
●prior的作用 prior关键字表示不进行递归查询,仅查询出满足id=1的记录,下面是将第一个查询去掉prior关键字后结果
select *
from dept
start with id=1
connect by prior id = parent_id;
- 大小: 16.7 KB
- 大小: 35.9 KB
分享到:
相关推荐
传统的关系数据库设计是面向二维表的,对于树形数据结构的处理需要进行特殊的处理方式,以便有效地组织和查询数据。 双亲双索引法是处理树形数据结构的一种有效方法。这种方法使用双亲法表示树的存储结构,即在...
- **非线性结构**包括树形结构(如二叉树)、图形结构等,这类结构中的元素之间存在着一对多或多对多的关系。 #### 二、Oracle数据库中的伪列与伪表 Oracle数据库作为业界领先的数据库管理系统之一,提供了多种...
5. 层次查询(HIERARICAL RETRIVEL)通常指在Oracle中通过CONNECT BY语句实现的树形结构数据查询,可以方便地查询具有层级关系的数据。 6. DECODE函数和行列互换则是对数据进行条件处理和转置的重要工具。DECODE...
Oracle数据库是一种广泛使用的商业关系型数据库管理系统,其层次查询功能主要基于树形结构来处理层级数据,这种结构被广泛用于表示具有层级关系的数据,如人事组织结构、公司组织架构以及计算机目录结构等。...
数据结构包括线性结构、树形结构、图结构和集合等,每种结构都有其特定的操作和应用。例如,线性结构如数组和链表,它们适用于顺序访问和遍历;树形结构如二叉树和堆,它们在搜索、排序等方面表现出色;图结构则在...
Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法如下所示: ```sql ...
堆是一种特殊的树形数据结构,可以是最大堆或最小堆,通常用于优先队列的实现。 图结构包括图的表示(邻接矩阵、邻接表)以及图的遍历算法(深度优先搜索和广度优先搜索),在路由选择、社交网络分析等领域有着广泛...
在Oracle数据库中,有时我们遇到一个特殊的查询需求,即字段中的值是以逗号分隔的字符串,我们需要根据每个单独的值来查询数据。在这种情况下,简单的`LIKE`查询无法满足需求,因为`LIKE`通常用于匹配模式,而不是...
2. **树形数据结构**:在计算机科学中,树是一种非线性数据结构,由节点(也称为顶点)和连接节点的边构成。每个节点可以包含零个或多个子节点,形成分层结构。树形数据结构常用于表示分类、文件系统、组织结构等。 ...
这些特殊的Oracle查询技巧极大地丰富了我们处理数据库数据的能力,不仅有助于查询和维护复杂的数据结构,还能提供关于数据库状态的关键信息,对于数据库管理员来说是不可或缺的工具。在实际工作中,根据具体需求灵活...
索引是一种特殊的数据结构,用于加速数据库表中数据的查找、排序和连接操作。它减少了数据访问的时间,提高了查询效率,尤其是在处理大量数据时。在这里,我们可能讨论的是关系型数据库管理系统(RDBMS)如MySQL、...
执行计划是指在Oracle数据库中执行SQL查询时所采用的数据访问路径。它详细描述了数据库如何处理查询请求,包括数据读取的方式、使用的索引以及连接操作等。执行计划对于理解查询性能至关重要,因为它直接影响到查询...
8. 栈与队列的变体:堆(Heap)是一种特殊的树形数据结构,用于实现优先队列。双端队列(Deque)允许在两端进行插入和删除操作。 9. 字符串:字符串在许多编程语言中是特殊的数据结构,用于处理文本数据。常见的...
"start with"是Oracle SQL中的一个特殊关键字,常用于递归查询,如查询树形结构的数据。例如,`START WITH employees.id = '1' CONNECT BY PRIOR employees.manager_id = employees.id` 这个查询会从id为1的员工开始...
本文主要关注B树索引,这是一种非常典型的树形结构索引。 ##### 1. B树索引结构 B树索引主要包括三种类型的节点: - **叶子节点(Leaf Node)**:包含指向表中实际数据行的条目。 - **分支节点(Branch Node)**:...
- `CURSOR`: 游标允许按行处理查询结果,常用于存储过程和PL/SQL块。 8. **自定义函数**: - 使用`CREATE FUNCTION`语句可以创建自定义函数,满足特定业务需求。 9. **其他特殊函数**: - `USER()`: 返回当前...
B树索引是Oracle中最常见的索引类型,它采用树形结构进行数据组织。B树索引主要由叶子节点、分支节点和根节点组成。叶子节点包含指向表数据行的ROWID,而分支节点则包含指向其他分支节点或叶子节点的指针。根节点...
在Oracle中,这种查询通过SQL的特殊语法实现,能够有效地生成树形结构的报表,帮助用户理解数据间的上下级关系。在本节的Oracle公司内部培训资料中,我们将深入探讨分级查询的相关知识。 首先,我们要了解分级查询...
#### 树形数据处理 **查询基本语法:** - 使用`CONNECT BY`子句和`PRIOR`关键字来表达父子关系。 **关于PRIOR:** - PRIOR用于指定父节点的列名,例如:`CONNECT BY PRIOR id = parent_id`。 **节点和分支的裁剪...