数据库层次查询更新
- 格式:pdf
- 大小:293.55 KB
- 文档页数:11
最常见的数据库模型数据库模型是数据库设计的基础,它定义了数据如何组织、存储和操作。
常见的数据库模型有层次模型、网络模型、关系模型和对象模型。
1. 层次模型层次模型是最早的数据库模型之一,它将数据组织成一个树状结构,每个节点代表一个实体,每个节点下面可以有多个子节点,但每个节点只能有一个父节点。
这种模型适用于具有固定深度的数据结构,例如组织机构、文件系统等。
尽管层次模型在数据访问方面具有高效性,但它的局限性也很明显,例如节点深度固定、节点之间的关系不够灵活等。
2. 网络模型网络模型是层次模型的改进版,它允许一个节点有多个父节点,这种关系称为“多重关系”。
网络模型适用于具有复杂关系的数据结构,例如电子电路、化学分子等。
尽管网络模型比层次模型更灵活,但它的实现和维护也更加困难,因此在实际应用中并不常见。
3. 关系模型关系模型是当前最流行的数据库模型,它将数据组织成多个表格(关系),每个表格包含多个行(元组)和多个列(属性)。
表格之间可以通过主键和外键建立关联,从而实现数据的查询和更新。
关系模型具有如下优点:数据结构灵活、适用于大规模数据、易于维护和扩展、具备高效的查询能力等。
因此,关系模型是大多数企业和组织采用的数据库模型。
4. 对象模型对象模型是面向对象编程中的数据库模型,它将数据组织成多个对象,每个对象包含多个属性和方法。
对象之间可以通过继承、聚合等方式建立关联,从而实现数据的封装和复用。
对象模型具有如下优点:支持面向对象编程、适用于复杂的数据结构、易于维护和扩展、具备高效的查询能力等。
因此,对象模型逐渐被广泛应用于企业和组织的信息系统中。
总结不同的数据库模型具有不同的优缺点,选择合适的数据库模型需要根据实际应用场景和需求来进行评估和选择。
在实际应用中,关系模型和对象模型是最常用的数据库模型,它们具有灵活性、可扩展性和高效性等优点,可以满足大多数企业和组织的需求。
数据库技术发展的4个阶段及其特点数据库技术是随着计算机技术的发展而逐步发展完善的,可以分为以下四个阶段:文件管理系统阶段、层次数据库阶段、网络数据库阶段和关系数据库阶段,下面我们将详细介绍这四个阶段的特点。
1.文件管理系统阶段文件管理系统阶段是数据库技术发展的最初阶段,也是最为简单、原始的阶段。
该阶段使用的是文件系统进行数据管理,将数据存储在文件中,并采用顺序读取和顺序写入的方式进行数据读写操作。
这一阶段的特点是数据处理效率低下,数据的查找、插入、删除等操作十分困难。
由于数据文件的存储位置没有固定的结构,因此对于大规模的数据处理,往往需要手动编写程序进行处理,大大降低了数据处理效率。
2.层次数据库阶段层次数据库阶段是在文件管理系统的基础上,改进而来的一种数据库管理方式。
这一阶段的特点是采用了层次结构来管理数据,使得数据文件的读写效率有了很大的提升。
层次数据库中数据以树形结构组织,可以实现快速的数据存储和查询,但树形结构限制了数据的组织形式。
当数据之间的关系不是树形结构,而是网状结构时,层次数据库就不能很好地进行处理了。
3.网络数据库阶段网络数据库阶段是在层次数据库的基础上,又有一定的改进和提升。
这一阶段的特点是对数据管理进行了标准化,使用了更先进的记录结构,可以实现更灵活的数据组织形式。
而且,网络数据库采用了具有分布式的结构形式,服务器和客户端可以相互通讯,方便了数据的共享和互通。
这一阶段的技术得到了广泛的应用,例如虚拟网络、淘宝开发平台、网上银行等。
4.关系数据库阶段关系数据库阶段是数据库技术发展的最后一个阶段,也是目前应用最广泛的数据管理方式。
相比于层次和网络数据库,关系数据库采用了更加简单、易操作、高效的数据库模型,实现了数据的高效查询、更新、删除等操作。
关系数据库的重要特点就是采用了结构化查询语言(SQL),能够实现高效的数据处理和管理,可以满足不同应用场景的需求,例如管理企业信息、人力资源、学生信息等。
说明:高等教育出版社的《数据库系统概论》第4版,简称《概论》;机械工业出版社的《数据库系统概念》第5版,简称《概念》。
1.试论述数据库系统主要动机、构成及DBMS主要功能特性。
说明数据库系统与文件系统的主要区别。
答:数据库设计的动机:数据库设计的目的是为了管理大量信息。
数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
DBMS主要功能:•数据库定义功能:DBMS提供数据定义语言(DDL)定义数据库的三级结构,包括外模式、概念模式、内模式及基相互之间的映象,定义数据的完整性、安全控制等约束。
因此,在DBMS中应包括DDL的编译程序。
•数据库的操纵功能:DBMS提供数据操纵语言(DML)实现对数据库中数据的操作。
基本的数据操作分成两类四种:检索(查询)、更新(插入、删除、修改)•数据库的保护功能:数据库中的数据是信息社会的战略资源,对数据的保护是至关重要的大事。
•数据库的存储管理:把各种DML语句转换成低层的文件系统命令,起到数据的存储、检索和更新的作用。
•数据库的维护功能:它有许多实用程序提供给数据库管理员:数据装载程序、备份程序、文件重组织程序、性能监控程序•数据字典:数据库系统中存放三级结构定义的数据库称为数据字典(DD)。
对数据库的操作都要通过访问DD才能实现,通常DD中还存放数据库运行时的统计信息。
文件系统和数据库系统主要区别:•在文件系统中,相互独立的文件的记录内部是有结构的,但记录之间没有联系。
数据库系统实现整体数据的结构化,是数据库的主要特征之一。
•在文件系统中,数据的最小存取单位是记录,粒度不能细到数据项。
而在数据库系统中,存取数据的方式也很灵活,可以存取数据库中的某一个数据项、一组数据项一个记录或或一组记录。
•文件系统中的文件是为某一特定应用服务的,文件的逻辑结构对该应用程序来说是优化的,因此要想对现有的数据再增加一些新的应用会很困难,系统不容易扩充。
数据库的原理是什么
数据库的原理是指数据库系统的设计和工作方式。
它包括以下几个关键原理:
1. 数据模型和结构:数据库采用不同的数据模型,如层次型、网状型和关系型等。
每个模型都有自己的数据结构和组织方式,用于存储和访问数据。
2. 数据库查询语言:数据库系统通过查询语言(如SQL)来
实现数据的操作和检索。
查询语言允许用户以简单和易于理解的方式来请求数据,并通过优化技术提高查询效率。
3. 数据库管理系统(DBMS):DBMS是管理和操作数据库的软件系统。
它负责数据的存储、访问、更新和保护。
DBMS
还负责实施数据完整性约束和事务处理等功能。
4. 数据库索引:为了提高数据查询效率,数据库使用索引来加速数据的检索。
索引是预先创建的数据结构,可以根据特定的列或字段值快速定位到相关的数据记录。
5. 数据库事务:事务是数据库中执行的一系列操作的逻辑单位。
数据库系统使用ACID(原子性、一致性、隔离性和持久性)
属性来确保事务的正确执行和数据的完整性。
6. 数据库优化和性能调优:为了提高数据库系统的性能,需要对数据库进行优化和调优。
这包括索引的设计和使用、查询的优化、存储空间的管理等。
7. 数据库安全和权限控制:数据库系统需要提供安全机制来保护数据的机密性和完整性。
它能够对用户进行身份验证,并根据用户的权限限制对数据进行访问和操作。
综上所述,数据库的原理基于数据模型和结构、查询语言、数据库管理系统、索引、事务、优化和安全等关键技术,以实现数据的有效存储、高效检索和安全保护。
存储层次结构的数据库存储层次结构的数据库是一种使用层次结构组织和管理数据的数据库系统。
它的设计灵感源自于计算机科学中的层次结构概念,通过树形结构来表示数据的层级关系。
在这种结构中,每个节点表示一个数据记录,而节点之间的关系则通过指针来建立。
存储层次结构的数据库有多层次的组织结构,通常包括一个根节点和多个子节点。
根节点位于层次结构的顶层,不具有父节点;而子节点则可以有一个或多个父节点。
通过这种层次结构,可以方便地进行数据的分层和组织,使得数据的访问和管理更加高效和直观。
在存储层次结构的数据库中,数据被组织成为一个树状结构,使得同一层次上的节点具有相同的属性,而父节点和子节点之间则存在着一对多的关系。
这种结构不仅可以用于表示数据的层级关系,还可以方便地进行数据查询、更新和删除操作。
存储层次结构的数据库的优点之一是支持数据的直接存取和快速检索。
由于数据记录之间的关系是由指针来表示的,所以可以通过指针的转移和跳跃来直接访问和检索指定的数据。
这种快速的存取方式使得数据库的查询效率更高,特别是对于具有复杂层次结构的数据来说。
除此之外,存储层次结构的数据库还具有较好的数据安全性和完整性。
通过定义父节点和子节点之间的关系,可以限制数据的访问和修改范围,确保数据的安全性。
同时,通过指针和索引的设置,可以对数据进行唯一性和完整性约束,防止数据的重复和损坏。
不过,存储层次结构的数据库也存在一些缺点。
首先,对于数据的动态变化处理存在一定的困难。
由于数据记录之间的关系是通过指针来建立的,所以当数据记录的层级结构发生变化时,需要重新调整指针的指向,这对于大规模的数据库来说是一项复杂和耗时的操作。
其次,存储层次结构的数据库在处理复杂查询和多路径查询时效率较低,因为需要经过多次的指针跳跃才能到达目标节点。
综上所述,存储层次结构的数据库是一种以层次结构为基础的数据库系统,通过树形结构来组织和管理数据。
它的设计灵感源自计算机科学中的层次结构概念,具有存取和检索效率高、安全性好等优点。
数据库数据模型及组成要素
数据库数据模型是数据库系统的核心,它描述了数据库系统的数据结构、数据操作和数据约束等方面。
常见的数据模型有层次模型、网状模型和关系模型。
层次模型:
层次模型是一种树形结构模型,它将数据组织成一棵树,其中有一个节点是根节点,其他节点都直接或间接地与根节点相连。
层次模型中的数据操作包括插入、删除、更新和查询等。
网状模型:
网状模型是一种比层次模型更加灵活的数据模型,它允许节点之间存在多个关系,可以表示复杂的数据结构。
网状模型中的数据操作与层次模型类似,也包括插入、删除、更新和查询等。
关系模型:
关系模型是一种二维表格模型,它将数据组织成一个或多个表格,每个表格由行和列组成。
关系模型中的数据操作包括插入、删除、更新和查询等,可以通过SQL语言来实现。
数据库的组成要素包括数据结构、数据操作和数据约束。
数据结构:
数据结构是指数据库中数据的组织方式,包括数据类型、数据关系、数据冗余等方面。
在关系模型中,数据结构由表格和表格之间的关系组成。
数据操作:
数据操作是指对数据库中的数据进行增删改查等操作的实现方式,包括SQL语言、数据检索和事务管理等方面。
数据约束:
数据约束是指对数据库中的数据进行约束和限制的条件,包括实体完整性约束、参照完整性约束和函数依赖约束等。
这些约束可以保证数据的完整性和一致性,防止数据出现异常或错误的情况。
数据库系统中的多维数据存储与查询技术引言随着数据量的不断增加,传统的关系型数据库系统在处理大规模数据存储和查询时面临一些挑战。
为了解决这些问题,多维数据存储与查询技术应运而生。
多维数据存储与查询技术是一种以多维数组的形式存储和组织数据,以支持复杂的数据查询和分析的技术。
本文将介绍多维数据存储与查询技术的基本原理和常见方法,并探讨其在数据库系统中的应用。
一、多维数据存储技术多维数据存储技术是指将数据按照多维数组的形式存储和组织起来,以支持多维查询的技术。
在多维数据存储中,数据被划分为多个维度,每个维度都包含一定数量的层次结构。
例如,在销售数据中,可以将数据按照时间、地区、产品等维度进行划分和组织。
1. 多维数据模型多维数据模型主要通过维和维度层次的定义,来表示多维数据中的关联关系。
多维数据模型中最基本的单位是维度属性,它表示一个维度上的一个可能取值。
例如,在销售数据中,时间维度可以包含年、季度、月份等属性。
在多维数据模型中,也包含了维度层次的概念。
维度层次是指在一个维度上,不断划分到更细粒度的层次结构。
例如,时间维度可以按照年-季度-月份的层次进行划分。
2. 多维数组存储多维数组存储是多维数据存储的核心技术之一。
多维数组的每个维度对应一个轴,而每个维度层次可以表示为轴的一个子集。
例如,在销售数据中,可以将时间维度表示为一个轴,地区和产品维度分别表示为另外两个轴。
多维数组存储的优点是能够高效地处理大规模的数据。
由于数据的存储方式非常紧凑,因此可以减少存储空间的占用,提高存储和查询的效率。
二、多维数据查询技术多维数据查询技术是指对多维数据进行灵活、高效的查询和分析的技术。
多维数据查询技术可以支持复杂的数据分析、透视、聚合和切片等操作,以帮助用户从不同角度观察数据。
1. 多维查询语言多维查询语言是用来描述多维数据查询和分析操作的语言。
多维查询语言提供了丰富的语法和语义,使用户可以用更自然的方式来表达查询需求。
数据库基础知识培训数据库是计算机科学领域中的一个重要概念,它是用于存储、管理和检索数据的系统。
对于计算机专业学生和从事与数据处理相关工作的人员来说,掌握数据库的基础知识是非常必要的。
本文将介绍数据库的基础知识,包括数据库的定义、类型和特点,以及一些常用的数据库管理系统(DBMS)。
一、数据库的定义数据库是指按照一定规范组织、存储、管理和维护数据的集合。
它可以用来存储结构化数据、半结构化数据和非结构化数据。
数据库的使用可以提高数据的管理效率、数据的共享性和数据的安全性。
二、数据库的类型1. 关系型数据库:关系型数据库使用表格来存储和组织数据,它将数据存储在多个表格中,并通过表格之间的关系进行数据的查询和处理。
关系型数据库最著名的代表是MySQL、Oracle和SQL Server。
2. 非关系型数据库:非关系型数据库是一种没有固定模式的数据存储系统,它可以存储不同类型和结构的数据。
非关系型数据库在某些场景下具有更高的性能和可伸缩性,例如MongoDB和Redis。
3. 层次型数据库:层次型数据库使用树形结构来存储数据,它将数据组织成层次结构,并使用父子关系来表示数据之间的关系。
层次型数据库主要用于管理包含层次关系的数据,如文件系统和组织结构。
三、数据库管理系统(DBMS)数据库管理系统(DBMS)是用于管理数据库的软件。
它提供了对数据库的访问、查询、更新和维护等功能。
常见的DBMS包括MySQL、Oracle、SQL Server和DB2。
1. MySQL:MySQL是一个开源的关系型数据库管理系统,它具有速度快、可靠性高和易于使用等特点。
MySQL适用于中小型应用和网站,如电子商务网站和论坛。
2. Oracle:Oracle是一个功能强大且广泛使用的关系型数据库管理系统。
它具有可靠性高、扩展性强和安全性好等特点。
Oracle主要用于大型企业和复杂的数据处理系统。
3. SQL Server:SQL Server是由微软公司开发的关系型数据库管理系统。
数据库系统的体系结构一、概述数据库系统是一种用于存储和管理数据的软件系统,它的核心是数据库管理系统(DBMS)。
数据库系统的体系结构定义了不同层次的组件和它们之间的关系,以实现高效的数据管理和访问。
本文将探讨数据库系统的体系结构,包括其组成要素和各个层次的功能。
二、数据库系统的组成要素数据库系统通常由以下几个组成要素构成:1. 数据数据是数据库系统中最重要的组成部分,它是被组织和存储的信息的集合。
数据可以是各种形式的,例如文本、图像、音频等。
数据库系统的目标是将数据有效地存储和管理,以便快速地检索和处理。
2. 数据库管理系统(DBMS)数据库管理系统是数据库系统的核心组件,它提供了对数据的管理和访问功能。
DBMS负责数据库的创建、维护、备份和恢复等任务。
它还提供了数据的查询、更新和删除等操作,以及数据的安全性和完整性保护机制。
3. 硬件硬件是数据库系统的物理基础,包括计算机、存储设备和网络等。
数据库系统需要在计算机上运行,利用存储设备来持久化数据,通过网络与用户进行交互。
4. 软件数据库系统需要依赖一些软件来运行,如操作系统、网络协议栈和数据库管理系统。
操作系统提供了数据库系统运行所需的基本功能,网络协议栈负责网络通信,而数据库管理系统则是数据库系统的核心。
5. 用户用户是数据库系统的使用者,包括数据库管理员、应用程序开发人员和最终用户等。
用户通过DBMS与数据库进行交互,进行数据的查询、更新和删除等操作。
三、数据库系统的层次结构数据库系统可以分为三个层次:外层模式(视图)、概念模式和内部模式(物理存储)。
1. 外层模式(视图)外层模式是用户所见到的数据库的子集,它定义了用户对数据库的逻辑视图。
每个用户可以定义自己的外层模式,只能看到和操作与其权限相关的数据。
外层模式使用户可以方便地访问和处理数据库中的数据,同时保护了数据的安全性和隐私。
2. 概念模式概念模式描述了整个数据库的逻辑结构和组织方式,它是全局的、统一的视图。
数据库的结构数据库(Database)是指一个以数据为基础,用于存储、检索和处理数据的技术系统。
它是一个可以让用户查询和更新有关信息的集中存储设备。
在当前的计算机时代,数据库被广泛使用,它们被用于存储和组织各种类型的数据。
二、数据库的结构数据库的结构是指数据库内部的组织结构,它定义了数据在内部的存储格式和组织方式。
数据库结构可以分为以下几种:1、网状数据库:网状数据库使用网状结构来存储和组织数据,其中数据实体可以被看成是网状结构中的节点,相互关联的实体之间是节点之间的链接。
2、层次型数据库:层次型数据库使用层次结构来存储和组织数据,其中数据实体可以被看成是层次结构中的层级,它们在彼此之间存在着父子关系。
3、关系型数据库:关系型数据库使用关系模式来存储和组织数据,其中数据实体可以被看作是表格中的行和列,它们以键 -对的形式相互关联。
三、数据库的应用数据库在当前的计算机时代中被广泛应用。
数据库可以用来存储各种不同类别的数据,例如客户资料、订单、产品信息等。
此外,数据库还可以用于检索和分析数据,并帮助用户做出正确的决策。
数据库也可以用来开发网络应用程序,提供存取数据服务,还可以实现企业的移动应用等。
四、数据库的优点数据库技术的出现给企业的管理和运营带来了很多方便。
首先,它可以大大降低企业的数据存储和管理成本,并且可以提高数据存储和管理的效率。
其次,数据库可以帮助企业集中管理和控制数据,使得企业的大数据库得以有效地维护,从而有效地管理和保存企业的数据,达到高效的管理效果。
此外,数据库可以实现跨企业的数据共享,从而促进企业的跨部门和跨国的协作,同时也提高了企业的竞争力。
五、数据库的缺点尽管数据库技术有很多优势,但是它也有一些缺点。
首先,许多企业在建立和维护数据库时需要花费大量的金钱,因为数据库管理系统是非常复杂的,因此需要购买专业的硬件和软件。
此外,数据库还存在安全性问题,如果数据库被黑客入侵,可能导致数据外泄,损害企业的商业利益。
5.层次查询(Hierarical Retrival)5.1 基本概念对于层次查询需要掌握:1.解释层次查询的基本概念,识别需求中需要用到层次查询的能力。
2.建立和格式化一个树形报表(tree report)。
3.修剪树形结构的节点(node)和枝(branches)。
关键词:tree,root(根),node,leaf(叶子),branch(树枝,分支)本节例子来源于表s_emp,表结构和数据如下:看上面的表s_emp,使用层次查询,我们可以获得一张表基于层次关系的数据集合。
Oracle是一种关系型数据库,在表中不可能以层次的关系存放数据。
但是我们可以通过一定的规则,使用tree walking(树的遍历或树的查找)来获得层次关系的数据。
Hierarical query是一种获得树的层析关系报表的方法。
树形结构的数据集合,存在于我们日常生活中的很多地方,比如考虑一个家族关系,有长辈,长辈下面有子女,子女下面还可以有子女,这转化为层次或等级关系就是:根节点只有一个,下面有子节点,子节点下面还有子节点,这样组成了一棵树。
(有时候,根节点root不一定只有一个,严格意义上说,这种情况不是一个严格的树)。
当一种层次关系是存在一个表的行中,那么这种层次是可以获得的。
例如,我们看s_emp表,对于title:VP,我们知道这些行中都包含manager_id=1,也就是说,这些行属于id=1的雇员的下属雇员,那么有title=vp又可以获得一系列的层次,而这些层次的跟则是id=1这个雇员。
由此,得到一棵树形结构数据集合。
层次树或等级树,在譬如家族关系,育种关系,组织管理,产品装配,人类进化,科学研究等领广泛应用。
下面我们就根据s_emp 这张表,根据职位大小来描述一个树形结构图。
如图: Velasquez (id=1 title=president )-----root level=1Ngao Nagayama Quick-To-See Ropeburn Child level =2Urguhart Menchu Biri Catchpole Havel Dancs SchwartzMagee Giljum SedeghiNguyen Level=3Level=4只显示部分树形结构树形结构的父子关系,你可以控制:1.遍历树的方向,是自上而下,还是自下而上。
2.确定层次的开始点(root)的位置。
层次查询语句正是从这两个方面来确定的,start with 确定开始点,connect by 确定遍历的方向。
5.2 层次查询5.2.1 语法:层次查询是通过start with 和connect by 子句标识的。
1.其中level 关键字是可选的,表示等级,表示root,2表示root 的child,其他相同的规则。
2.From 之后可以是table,view 但是只能是一个table 。
3.Where 条件限制了查询返回的行,但是不影响层次关系,属于将节点截断,但是这个被截断的节点的下层child 不受影响。
4.Start with 是表示开始节点,对于一个真实的层次关系,必须要有这个子句,但是不是必须的,后面详细介绍。
5.connect by prior是指定父子关系,其中prior的位置不一定要在connect by之后,对于一个真实的层次关系,这也是必须的。
对于from是视图的,那么这个view不能包含join。
5.2.2 遍历树Start with子句:首先必须确定startpoint,通过start with子句,后面加条件,这个条件是任何合法的条件表达式。
Start with确定将哪行作为root,如果没有start with,则每行都当作root,然后查找其后代,这不是一个真实的查询。
Start with后面可以使用子查询,如果有where条件,则会截断层次中的相关满足条件的节点,但是不影响整个层次结构。
可以带多个条件。
对于s_emp,从root title=president开始,语句如下:selec t le v el,id,manag e r_id,l a s t_nam e,tit le from s_e mps tart with manag e r_id i s nu llc onn ec t by prior id=manag e r_id;这个语句与下面的语句等价,将s tart with 后面的条件换成子查询。
selec t le v el,id,manag e r_id,l a s t_nam e,tit le from s_e mps tart with tit le=(selec t tit le from s_e mp wh e r e manag e r_id i s nu ll)c onn ec t by prior id=manag e r_id;注意:start with 和connect by prior不是ANSI标准sql。
Connect by子句:Connect by与prior确定一个层次查询的条件和遍历的方向(prior确定)。
Connect by prior column_1=column_2;(其中prior表示前一个节点的意思,可以在connect by等号的前后,列之前,也可以放到select中的列之前)。
Connect by也可以带多个条件,比如 connect by prior id=manager_id and id>10;方向:1.自顶向下遍历:就是先由根节点,然后遍历子节点。
column_1表示父key,column_2表示子key。
即这种情况下:connect by prior 父key=子key表示自顶向下,等同于connect by 子key=prior 父key.例如:selec t le v el,id,manag e r_id,l a s t_nam e,tit le from s_e mps tart with manag e r_id=2c onn ec t by id=prior manag e r_id;--自下而上遍历2.自底向上遍历:就是先由最底层的子节点,遍历一直找到根节点。
与上面的相反。
Connect by之后不能有子查询,但是可以加其他条件,比如加上and id !=2等。
这句话则会截断树枝,如果id=2的这个节点下面有很多子孙后代,则全部截断不显示。
比如下面的句子:selec t le v el,id,manag e r_id,l a s t_nam e,tit le from s_e mps tart with tit le=(selec t tit le from s_e mp wh e r e manag e r_id i s nu ll)c onn ec t by prior id=manag e r_id and id!=2;不来不加上id!=2,共有25条记录,现在加上这个条件只有9条记录了,因为id=2的后代包括自己共有16条记录,全部被截断。
5.2.3 使用level和lpad格式化报表Level是层次查询的一个伪列,如果有level,必须有connect by,start with可以没有。
Lpad是在一个string的左边添加一定长度的字符,并且满足中间的参数长度要求,不满足自动添加。
例如现在的需求是,输出s_emp等级报表,root节点的last_name不变,比如第2等级,也就是level=2的前面加两个’_’符号,level=3的前面加4个。
这样我们可以得到一个公式就是:Lpad(last_name,length(last_name)+(level*2)-1,’_’)可以得出下面的语句:selec t le v el,id,manag e r_id,l pad(l a s t_nam e,le ngth(l a s t_nam e)+(le v el*2)-2,'_'),tit le,priorl a s t_nam e from s_e mps tart with manag e r_id i s nu llc onn ec t by prior id=manag e r_id;selec t中的prior l a s t_nam e是输出其父亲的l a s t_nam e.这个语句执行的结果如下:5.2.4 修剪branches上面已经提到,where子句会将节点删除,但是其后代不会受到影响,connect by 中加上条件会将满足条件的整个树枝包括后代都删除。
要注意,如果是connect by之后加条件正好条件选到根,那么结果和没有加一样,如图所示:5.2.5 层次查询限制1.层次查询from 之后如果是table,只能是一个table,不能有join。
2.from之后如果是view,则view不能是带join的。
3.使用order by子句,order子句是在等级层次做完之后开始的,所以对于层次查询来说没有什么意义,除非特别关注level,获得某行在层次中的深度,但是这两种都会破坏层次。
见5.3增强特性中的使用siblings排序。
4.在start with中表达式可以有子查询,但是connect by中不能有子查询。
5.2.6 应用1)查询每个等级上节点的数目先查看总共有几个等级:selec t c ount(di s tin c t le v el)from s_e mps tart with manag e r_id i s nu llc onn ec t by prior id=manag e r_id;要查看每个等级上有多少个节点,只要按等级分组,并统计节点的数目即可,可以这样写:selec t le v el,c ount(l a s t_nam e)from s_e mps tart with manag e r_id i s nu llc onn ec t by prior id=manag e r_idgroup by le v el;2)格式化报表见5.2.3.3)查看等级关系有一个常见的需求,比如给定一个具体的emp看是否对某个emp有管理权,也就是从给定的节点寻找,看其子树节点中能否找到这个节点。
如果找到,返回,找不到,no rows returned.比如对于s_emp表,从根节点,也就是manager_id is null的开始找,看first_name=’E le na’是否被它管理,语句如下:selec t le v el,a.*froms_e mp awh e r e fir s t_nam e='E le na'–被管理的节点s tart with manag e r_id i s nu ll –开始节点c onn ec t by prior id=manag e r_id;4)删除子树比如有这样的需求,现在要裁员,将某个部门的员工包括经理全部裁掉,那么可以使用树形查询作为子查询实现这个功能。