create table employees( employee_id integer constraint employees_pk primary key, manager_id integer constraint employees_fk_employees references employees(employee_id), first_name varchar2(10) not null, last_name varchar2(10) not null, title varchar2(20), salary number(6,0) ); insert into employees(employee_id,first_name,last_name,title,salary) values(1,'James','Smith','CEO',800000); insert into employees values(2,1,'Ron','Johnson','Sales Manager',600000); insert into employees values(3,2,'Fred','Hobbs','Sales Person',200000); insert into employees values(4,1,'Susan','Jones','Support Manager',500000); insert into employees values(5,2,'Rob','Green','Sales Person',40000); insert into employees values(6,4,'Jane','Brown','Support Person',45000); insert into employees values(7,4,'Jone','Grey','Support Person',30000); insert into employees values(8,7,'Jean','Blue','Support Person',29000); insert into employees values(9,6,'Henry','Heyson','Support Person',30000); insert into employees values(10,1,'Kenvin','Black','Ops Manager',100000); insert into employees values(11,10,'Keith','Long','Ops Person',50000); insert into employees values(12,10,'Frank','Howard','Ops Person',50000); insert into employees values(13,10,'Doreen','Penn','Ops Person',47000);
员工的关系式一个树形结构,要提取不同员工之间的关系可以使用select 语句的connect by 和start with 子句执行层次化查询。
语法:
select [level],column,...
from table
[where where_condition]
start with start_condition connect by prior prior_condition
level 是一个伪列,代表树的第几层。根节点的值是1,根节点的子节点是2,以此类推。
start_condition 定义了层次化查询的起点。当编写层次化查询时必须指定start with 子句。例如:将start_condition 定义为 employee_id=1,表示从员工Id=1开始查询。
prior_condition 定义了父行和子行之间的关系。当编写层次化查询时必须指定prior_codition子句。例如将prior_condition 定义为 employee_id=manager_id,表示父节点的employee_id和子节点的manager_id之间存在相等关系。
select employee_id,manager_id,first_name,last_name from employees start with employee_id=1 connect by prior employee_id=manager_id;
查询的结果是:
1 James Smith 2 1 Ron Johnson 3 2 Fred Hobbs 5 2 Rob Green 4 1 Susan Jones 6 4 Jane Brown 9 6 Henry Heyson 7 4 Jone Grey 8 7 Jean Blue 10 1 Kenvin Black 11 10 Keith Long 12 10 Frank Howard 13 10 Doreen Penn
使用LEVEL 展示员工所处的层次:
select level,employee_id,manager_id,first_name,last_name from employees start with employee_id=1 connect by prior employee_id=manager_id order by level;
查询结果:
1 1 James Smith 2 10 1 Kenvin Black 2 2 1 Ron Johnson 2 4 1 Susan Jones 3 13 10 Doreen Penn 3 7 4 Jone Grey 3 11 10 Keith Long 3 5 2 Rob Green 3 3 2 Fred Hobbs 3 12 10 Frank Howard 3 6 4 Jane Brown 4 8 7 Jean Blue 4 9 6 Henry Heyson
格式化层次查询结果:
select level,lpad('-',2*(level-1))||first_name||' '||last_name as employee from employees start with employee_id=1 connect by prior employee_id=manager_id;
结果:
1 James Smith 2 -Ron Johnson 3 -Fred Hobbs 3 -Rob Green 2 -Susan Jones 3 -Jane Brown 4 -Henry Heyson 3 -Jone Grey 4 -Jean Blue 2 -Kenvin Black 3 -Keith Long 3 -Frank Howard 3 -Doreen Penn
相关推荐
Oracle 层次化查询是数据库管理系统中用于处理具有层级关系数据的一种强大工具。在这个特定的案例中,我们看到的是一个行政区划数据表,其中包含了中国的省份、城市和县的编码。行政区划代码的设计使得通过检查特定...
本教程主要涵盖Oracle数据库中的“包”、“层次化查询”和“触发器”这三个关键概念,对于初学者来说,理解并掌握这些知识对于进一步深入学习Oracle数据库至关重要。 首先,让我们详细探讨“包”(Package)。在...
通过视频的方式详细叙述Oracle 11g中包,层次化查询和触发器的用法
### Oracle层次查询详解 在Oracle数据库中,处理具有层次结构的数据是一项常见的需求,尤其是在企业管理、财务分析、组织架构展示等领域。Oracle提供了强大的`CONNECT BY`子句,它能够有效地进行层次查询,帮助用户...
Oracle层次查询功能是Oracle数据库系统中的一个重要特性,它在关系型数据库管理中为处理具有层级关系的数据提供了便利。本文主要探讨了如何利用Oracle的层次查询功能处理和展示类似树形结构的数据。 首先,层次结构...
### Oracle 实战SQL层次查询详解 #### 一、层次查询概念 层次查询,也被称为树型结构查询,是在SQL中最常见的功能之一。这种查询方式主要用于处理具有层级结构的数据,例如组织架构、产品分类等场景。在Oracle...
高级sql关于层次查询更新 对于层次查询需要掌握: 1.解释层次查询的基本概念,识别需求中需要用到层次查询的能力。 2.建立和格式化一个树形报表(tree report)。 3.修剪树形结构的节点(node)和枝(branches)。
### Oracle高层次知识详解 #### 一、Oracle表分析的作用 Oracle表分析主要用于优化查询性能,通过对表中的数据分布情况进行统计,帮助数据库优化器选择最佳的查询执行路径。表分析涉及的关键概念包括: - **统计...
在学习层次查询时,首先要理解自然树结构的概念,这通常指的是数据表中的一行数据可以有多个子行,而每个子行又有自己的子级,形成一个层次化的结构。例如,EMP表中的数据就展示了员工的上级-下级关系,形成了一个...
SQL(结构化查询语言)用于查询、插入、更新和删除数据库中的数据。学习Oracle SQL,你需要理解DML(数据操纵语言)如SELECT、INSERT、UPDATE、DELETE,以及DDL(数据定义语言)如CREATE、ALTER、DROP等语句。此外,...
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准语言。它被设计用来进行数据定义、数据操纵和数据控制。 #### Oracle数据类型 Oracle支持多种数据类型,包括数字类型...
2. **SQL语言**:SQL(结构化查询语言)是操作Oracle数据库的核心工具。通过SQL,我们可以创建、修改和查询数据库对象,如表、视图、索引等。在达内的Oracle笔记中,可能会详细讲解SELECT语句用于数据检索,INSERT、...
1. 规范化理论:在设计Oracle数据库时,遵循第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以及更高层次的规范化,以减少数据冗余和提高数据一致性。 2. 数据库模式:通过创建逻辑视图(如星型模型、雪花模型...
Oracle数据库系统是Oracle公司开发的,它采用SQL作为查询语言,支持分布式数据库、事务处理、备份恢复等多种功能。Oracle以其强大的性能、安全性及可扩展性闻名,广泛应用于金融、电信、政府等多个领域。 二、...
Oracle数据库在开发和运维中涉及到许多工具,如SQL*Plus用于交互式查询,SQL Developer作为图形化开发工具,企业管理器(EM)用于直观监控和管理数据库,以及Toad、PL/SQL Developer等第三方工具。此外,还要熟悉...
### Oracle递归查询详解 #### 一、引言 在处理具有层级结构的数据时,递归查询是一项非常有用的技能。例如,在处理组织架构、产品分类等数据时,我们经常需要查询某一节点及其所有子节点或者从某个节点追溯到其根...
首先,Oracle数据库的基础知识包括数据库概念、数据模型(如层次模型、网状模型和关系模型)、SQL语言(Structured Query Language)的使用,以及Oracle数据库的安装与配置。学员将学习如何创建数据库、表空间、表、...
递归CTE的查询一般包括三个部分:锚点部分(anchor member)用于初始化递归的起点,递归部分(recursive member)用于定义递归逻辑,以及终止条件(terminating condition),通常使用WHERE子句来限制递归的深度或...