数据库系统概论(期末复习版)
(一)绪论
数据(Data):是数据库中存储的基本对象
数据的定义:描述事物的符号记录
数据的种类:文字、图形、图象、声音等
数据的特点:数据与其语义是不可分的
数据库(Database,简称DB):是长期储存在计算机内、有组织的、可共享的大量数据集合
数据库管理系统(Database Management System,简称DBMS):是位于用户与操作系统之间的一层数据管理软件。
DBMS的用途:科学地组织和存储数据、高效地获取和维护数据。
DBMS的主要功能:
数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。
数据库系统的构成:由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员(和用户)构成。
数据管理:对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题
数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。
数据模型分成两个不同的层次
(1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模。
(2) 数据模型 主要包括网状模型、层次模型、关系模型等,它是按计算机系统的观点对数据建模。
客观对象的抽象过程---两步抽象:① 现实世界中的客观对象抽象为概念模型;② 把概念模型转换为某一DBMS支持的数据模型。
数据结构:对象类型的集合 即数据结构是对系统静态特性的描述
两类对象:①与数据类型、内容、性质有关的对象 ②与数据之间联系有关的对象
数据操作:对数据库中各种对象(型)的实例(值)允许执行的操作及有关的操作规则
数据操作的类型:检索 更新(包括插入、删除、修改)
数据模型对操作的定义:
①操作的确切含义 ;②操作符号;③操作规则(如优先级);④ 实现操作的语言数据模型对操作的定义
数据操作是对系统动态特性的描述。
数据模型对约束条件的定义:反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。
信息世界中的基本概念
(1) 实体(Entity)
客观存在并可相互区别的事物称为实体。
(2) 属性(Attribute)
实体所具有的某一特性称为属性。
一个实体可以由若干个属性来刻画。
(3) 码(Key)
唯一标识实体的属性集称为码。
(4) 域(Domain)
属性的取值范围称为该属性的域。
(5) 实体型(Entity Type)
用实体名及其属性名集合来抽象和刻画
同类实体称为实体型
(6) 实体集(Entity Set)
同型实体的集合称为实体集
联系(Relationship)
现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。
实体内部的联系通常是指组成实体的各属性之间的联系 。
实体之间的联系通常是指不同实体集之间的联系。
两个实体型间的联系
1.一对一联系
1.如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。记为1:1。
2.一对多联系
1.如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系记为1:n
3.多对多联系(m:n)
1.如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系。记为m:n
概念模型的表示方法
实体-联系方法(E-R方法):
①用E-R图来描述现实世界的概念模型;
②E-R方法也称为E-R模型;
常用数据模型
非关系模型:层次模型(Hierarchical Model);网状模型(Network Model )
2.数据结构:以基本层次联系为基本单位
基本层次联系:两个记录以及它们之间的一对多(包括一对一)的联系
- 面向对象模型(Object Oriented Model)数据结构:对象
- 关系模型(Relational Model) 数据结构:表
- 层次模型满足下面两个条件的基本层次联系的集合为层次模型。①有且只有一个结点没有双亲结点,这个结点称为根结点 ②根以外的其它结点有且只有一个双亲结点
表示方法
实体型:用记录类型描述。每个结点表示一个记录类型。
属性:用字段描述。每个记录类型可包含若干个字段。
联系:用结点之间的连线表示记录(类)型之间的一对多的联系。
层次模型的特点:
层次模型的优缺点:
网状数据模型的数据结构
网状模型:满足下面两个条件的基本层次联系的集合为网状模型。①允许一个以上的结点无双亲;②一个结点可以有多于一个的双亲。
表示方法(与层次数据模型相同)
实体型:用记录类型描述。 每个结点表示一个记录类型。
属性:用字段描述。 每个记录类型可包含若干个字段。
联系:用结点之间的连线表示记录(类)型之间的一对多的父子联系。
网状模型与层次模型的区别 : 网状模型允许多个结点没有双亲结点 ;网状模型允许结点有多个双亲结点; 网状模型允许两个结点之间有多种联系(复合联系) ;网状模型可以更直接地去描述现实世界 ;层次模型实际上是网状模型的一个特例
网状模型的优缺点:
关系模型的基本概念
关系(Relation)一个关系对应通常说的一张表。
元组(Tuple)表中的一行即为一个元组。
属性(Attribute)表中的一列即为一个属性,给每一个属性起一个名称即属性名。关系必须是规范化的,满足一定的规范条件
表示方法
实体型:用关系表表示
属性:用属性名表示
联系: 一对一:隐含在实体对应关系中
一对多:隐含在实体对应关系中
多对多:用新的关系表表示
关系必须是规范化的,满足一定的规范条件,如 不允许表中还有表。最基本的规范条件:关系的每一个分量必须是一个不可分的数据项。
关系数据模型的优缺点
关系数据模型的操纵与完整性约束
- 查询、插入、删除、更新
- 数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合
- 存取路径对用户隐蔽,用户只要指出“干什么”,不必详细说明“怎么干”
关系模型的完整性约束
- 实体完整性
- 参照完整性
- 用户定义的完整性
关系数据模型的存储结构
① 表以文件形式存储
② 有的DBMS一个表对应一个操作系统文件
③ 有的DBMS自己设计文件结构
关系模型的优缺点
数据库系统结构
数据库的二级映像功能与数据独立性
外模式/模式映像
映象定义通常包含在各自外模式的描述中保证数据的逻辑独立性 ;当模式改变时,数据库管理员修改有关的外模式/模式映象,可以使外模式保持不变; 应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。 修改 外模式/模式 的映射(create view) 外模式/模式映象可以保证获得一定程度的数据的逻辑独立性(非 完全独立)。
模式/内模式映象
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系 。例如,说明逻辑记录和字段在内部是如何表示的。
数据库中模式/内模式映象是唯一的。 该映象定义通常包含在模式描述中。保证数据的物理独立性。
当数据库的存储结构改变了,数据库管理员修改模式/ 内模式映象,使模式保持不变。例如,存储结构:由堆存储—hash存储, 从而应用程序不受影响。
保证了数据与程序的物理独立性,简称数据的物理独立性 。
模式/内模式映象保证获得完全的数据物理独立性
总结:
分布式结构的数据库系统
- 数据库中的数据在逻辑上是一个整体,但物理地分布在计算机网络的不同结点上。
- 网络中的每个结点都可以独立处理本地数据库中的数据,执行局部应用
- 同时也可以同时存取和处理多个异地数据库中的数据,执行全局应用
- 优点
- 适应了地理上分散的公司、团体和组织对于数据库应用的需求。
- 缺点
- 数据的分布存放给数据的处理、管理与维护带来困难。
- 当用户需要经常访问远程数据时,系统效率会明显地受到网络传输的制约
数据库管理员(DBA)
- 决定数据库中的信息内容和结构
- 决定数据库的存储结构和存取策略
- 定义数据的安全性要求和完整性约束条件
(二)关系数据库
关系模型的组成
- 关系数据结构
- 关系操作集合
- 关系完整性约束
1) 常用的关系操作
- 查询:选择、投影、连接、除、并、交、差
- 数据更新:插入、删除、修改
- 查询的表达能力是其中最主要的部分
2) 关系操作的特点
- 集合操作方式,即操作的对象和结果都是集合。
- 非关系数据模型的数据操作方式:一次一记录
- 文件系统的数据操作方式
3) 关系数据语言的种类
- 关系代数语言
- 用对关系的运算来表达查询要求
4) 关系数据语言的特点
- 关系语言是一种高度非过程化的语言:
- 存取路径的选择由DBMS的优化机制来完成
- 用户不必用循环结构就可以完成数据操作
- 能够嵌入高级语言中使用
- 关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价
关系
域(Domain)
笛卡尔积(Cartesian Product)给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn={(d1,d2,…,dn)|diÎDi,i=1,2,…,n}
所有域的所有取值的一个组合 不能重复
元组(Tuple)笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。
3) 分量(Component)
- 笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量。
4) 基数(Cardinal number)
- 若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
5)笛卡尔积的表示方法
- 笛卡尔积可表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域。
关系(Relation)
1) 关系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为 R(D1,D2,…,Dn)
R:关系名
n:关系的目或度(Degree
关系中的每个元素是关系中的元组,通常用t表示。
3) 单元关系与二元关系
当n=1时,称该关系为单元关系(Unary relation)。
当n=2时,称该关系为二元关系(Binary relation)
4) 关系的表示
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。
5) 属性
关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。 n目关系必有n个属性。
6) 码
候选码(Candidate key)
①若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
②在最简单的情况下,候选码只包含一个属性。称为全码(All-key)
在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
主码
若一个关系有多个候选码,则选定其中一个为主码(Primary key)主码的诸属性称为主属性(Prime attribute)。不包含在任何侯选码中的属性称为非码属性(Non-key attribute)
7) 三类关系
基本关系(基本表或基表)实际存在的表,是实际存储数据的逻辑表示。
查询表 结果对应的表。
视图表 由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
基本关系的性质
① 列是同质的(Homogeneous)
每一列中的分量是同一类型的数据,来自同一个域
② 不同的列可出自同一个域
其中的每一列称为一个属性 不同的属性要给予不同的属性名
③ 列的顺序无所谓
列的次序可以任意交换 ,遵循这一性质的数据库产品(如ORACLE),增加新属性时,永远是插至最后一列,但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了属性顺序。
④ 任意两个元组不能完全相同
由笛卡尔积的性质决定但许多关系数据库产品没有遵循这一性质。例如:Oracle,FoxPro等都允许关系表中存在两个完全相同的元组,除非用户特别定义了相应的约束条件。
⑤ 行的顺序无所谓
行的次序可以任意交换,遵循这一性质的数据库产品(如ORACLE),插入一个元组时永远插至最后一行,但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了元组的顺序。
⑥ 分量必须取原子值
每一个分量都必须是不可分的数据项。这是规范条件中最基本的一条
关系模式(Relation Schema)是型。关系是值关系模式是对关系的描述,它包括以下要素:
- 元组集合的结构:关系模式定义了元组的集合,每个元组代表关系中的一个实例。
- 属性构成:关系模式指定了关系中的属性,每个属性代表关系中的一个特征或字段。
- 属性来自的域:每个属性来自于一个特定的域,域定义了属性的取值范围。
- 属性与域之间的映象关系:关系模式指定了属性与域之间的映射关系,确保属性的取值符合域的要求。
- 元组语义以及完整性约束条件:关系模式可以包含有关元组语义和完整性约束条件的描述,用于限制关系中的数据。
- 属性间的数据依赖关系集合:关系模式可以包含属性间的数据依赖关系集合,用于描述属性之间的相互关系,例如主键、外键、函数依赖等。
定义关系模式
关系模式可以形式化地表示为:
R(U,D,dom,F)
关系模式通常可以简记为 R (U) 或 R (A1,A2,…,An )
R 关系名
A1,A2,…,An 属性名
注:A1,A2,…,An为属性名;域名及属性向域的映象常常直接说明为属性的类型、长度。
关系模式:对关系的描述静态的、稳定的
关系:关系模式在某一时刻的状态或内容动态的、随时间不断变化的,关系模式和关系往往统称为关系。两者通过上下文加以区别。
1. 关系数据库
在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
2. 关系数据库的型与值
关系数据库也有型和值之分,关系数据库的型称为关系数据库模式,是对关系数据库的描述
若干域的定义,在这些域上定义的若干关系模式,关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库
3 关系的完整性
关系模型的完整性规则是对关系的某种约束条件。
关系模型中三类完整性约束:
实体完整性
参照完整性
用户定义的完整性
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
实体完整性
实体完整性规则(Entity Integrity)
若属性A是基本关系R的主属性,则属性A不能取空值。
关系模型必须遵守实体完整性规则的原因:
(1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集或多对多联系。
(2) 现实世界中的实体和实体间的联系都是可区分的,即它们具有某种唯一性标识。
(3) 相应地,关系模型中以主码作为唯一性标识。
(4) 主码中的属性即主属性不能取空值。 空值就是“不知道”或“无意义”的值。
主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。
注意 :实体完整性规则规定基本关系的所有,主属性都不能取空值。
参照完整性
1. 关系间的引用
2. 外码
3. 参照完整性规则
关系间的引用
在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。
2.外码(Foreign Key)
设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码。基本关系R称为参照关系(Referencing Relation)基本关系S称为被参照关系(ReferencedRelation)或目标关系(Target Relation)。
说明
- 关系R和S不一定是不同的关系
- 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
- 外码并不一定要与相应的主码同名
当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。
3. 参照完整性规则
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
· 或者取空值(F的每个属性值均为空值)
· 或者等于S中某个元组的主码值。
用户定义的完整性
- 用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
- 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。
Operation 运算,操作
Operator 算子
Operand 操作数
1.关系代数
一种抽象的查询语言,用对关系的运算来表达查询
2.关系代数运算的三个要素
运算对象:关系
运算结果:关系
运算符:2类(集合运算和关系运行)
关系代数运算符
4.关系代数运算的分类
传统的集合运算
并、差、交、广义笛卡尔积
专门的关系运算
选择、投影、连接、除
5.常用的表示记号
(1) R,t∈R,t[Ai]
设关系模式为R(A1,A2,…,An),它的一个关系设为R。t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量 。
(2)
(3)
(4)
传统的集合运算(关系代数运算是以集合运算为基础的运算)
①并(Union)关系R与关系S的并记作 R∪S = { t|t∈R∨t ∈S } 仍为n目关系,由属于R或属于S的元组组成
② 差(execpt)关系R与关系S的差记作 R -S = { t|t∈R∧t∉S } 仍为n目关系,由属于R而不属于S的所有元组组成
③交 关系R与关系S的交记作 R∩S = { t|t∈ R∧t ∈S }或者 R∩S = R –(R-S)仍为n目关系,由既属于R又属于S的元组组成
④ 笛卡尔积 广义笛卡尔积(Extended Cartesian Product)
专门的关系运算
1. 选择(Selection)
2. 投影(Projection)
3. 连接(Join)
关于连接的一些概念:
悬浮元祖( dangling tuple ) :两个关系R和S在做自然连接时,关系R中某些元 组有可能在S中不存在公共属性上值相等的元组 ,从而造成R中这些元组在操作时被舍弃了,这 些被舍弃的元组称为悬浮元组。
外连接 (OUTER JOIN)
如果把舍弃的元组也保存在结果关系中,而在其他 属性上填空值(Null),这种连接就叫做外连接。
左外连接(LEFT OUTER JOIN或LEFT JOIN)(留哪边就叫 啥外连接)
如果只把左边关系R中要舍弃的元组保留就叫做左外连接
右外连接
如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN或RIGHT JOIN)。
4. 除(Division)
(三)关系数据库标准语言SQL
3.1 SQL概述
3.2 数 据 定 义
3.2.1模式的定义与删除
定义模式
删除模式
3.2.2基本表
定义基本表
常用完整性约束
- 主码约束: PRIMARY KEY
- 唯一性约束:UNIQUE
- 非空值约束:NOT NULL
- 参照完整性约束
PRIMARY KEY与 UNIQUE的区别
删除基本表
⑵ 删除属性列
直接/间接删除
- 把表中要保留的列及其内容复制到一个新表中
- 删除原表
- 再将新表重命名为原表名
直接删除属性列:(新)
例:ALTER TABLE Student Drop Scome;
ALTER TABLE Student MODIFY Sage SMALLINT;
注:修改原有的列定义有可能会破坏已有数据
修改基本表
3.3 建立与删除索引
建立索引是加快查询速度的有效手段
建立索引
DBA或表的属主(即建立表的人)根据需要建立;
有些DBMS自动建立以下列上的索引: ①PRIMARY KEY ②UNIQUE
维护索引:DBMS自动完成
使用索引: DBMS自动选择是否使用索引以及使用哪些索引
建立索引
唯一值索引
聚簇索引&非聚簇索引
更新索引
删除索引
3.5 查 询
查询语句:
①SELECT子句:指定要显示的属性列
②FROM子句:指定查询对象(基本表或视图)
③ WHERE子句:指定查询条件
④ GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
⑤HAVING短语:筛选出只有满足指定条件的组
⑥ORDER BY子句:对查询结果表按指定列值的升序或降序排序
单表查询
查询仅涉及一个表,是一种最简单的查询操作
⑴ 选择表中的若干列
⑵ 选择表中的若干元组
⑶ 对查询结果排序
⑷ 使用集函数
⑸ 对查询结果分组
查询经过计算的值
SELECT子句的<目标列表达式>为表达式
①算术表达式 ②字符串常量 ③函数 ④列别名
二、选择表中的若干元组
- 消除取值重复的行:在SELECT子句中使用DISTINCT短语
- 查询满足条件的元组 :
WHERE子句常用的查询条件
(1) 比较大小
在WHERE子句的<比较条件>中使用比较运算符
- =,>,<,>=,<=,!= 或 <>,!>,!<,
- 逻辑运算符NOT + 比较运算符
(2) 确定范围
使用谓词 BETWEEN … AND …
NOT BETWEEN … AND …
(3) 确定集合
使用谓词 IN <值表>, NOT IN <值表>
<值表>:用逗号分隔的一组取值
(4) 字符串匹配
- [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]
<匹配串>:指定匹配模板
匹配模板:固定字符串或含通配符的字符串
当匹配模板为固定字符串时,
可以用 = 运算符取代 LIKE 谓词
用 != 或 < >运算符取代 NOT LIKE 谓词
通配符
- % (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
- _ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design'
ESCAPE '\'
(5) 涉及空值的查询
- 使用谓词 IS NULL 或 IS NOT NULL
- “IS NULL” 不能用 “= NULL” 代替
(6) 多重条件查询
用逻辑运算符AND和 OR来联结多个查询条件
- AND的优先级高于OR
- 可以用括号改变优先级
可用来实现多种其他谓词
- [NOT] IN
- [NOT] BETWEEN … AND …
三、对查询结果排序
使用ORDER BY子句
可以按一个或多个属性列排序: 升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
- ASC:排序列为空值的元组最后显示
- DESC:排序列为空值的元组最先显示
四、使用集函数
主要集函数
注:处COUNT(*) 外,都跳过空值只处理非空值。
五、对查询结果分组
使用GROUP BY子句 分组
细化集函数的作用对象
- 未对查询结果分组,集函数将作用于整个查询结果;对查询结果分组后,集函数将分别作用于每个组
- GROUP BY子句的作用对象是查询的中间结果表
- 分组方法:按指定的一列或多列值分组,值相等的为一组
- 使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数
使用HAVING短语筛选最终输出结果
- 只有满足HAVING短语指定条件的组才输出
- HAVING短语与WHERE子句的区别:作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组 ②HAVING短语作用于组,从中选择满足条件的组。
连接查询
同时涉及多个表的查询称为连接查询
用来连接两个表的条件称为连接条件或连接谓词
连接操作的执行过程
嵌套循环法(NESTED-LOOP)
- 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。
- 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。
- 重复上述操作,直到表1中的全部元组都处理完毕
排序合并法(SORT-MERGE)
索引连接(INDEX-JOIN)
对表2按连接字段建立索引;
对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组
SQL中连接查询的主要类型
广义笛卡尔积;等值连接(含自然连接); 非等值连接查询;自身连接查询;外连接查询;复合条件连接查询
一、广义笛卡尔积
- 不带连接谓词的连接
- 很少使用
二、等值与非等值连接查询
等值连接
- 连接运算符为 = 的连接操作
- [<表名1>.]<列名1> = [<表名2>.]<列名2>
- 任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀。
自然连接
- 等值连接的一种特殊情况,把目标列中重复的属性列去掉。
非等值连接查询
连接运算符 不是 = 的连接操作
三、自身连接
- 一个表与其自己进行连接,称为表的自身连接。
2.需要给表起别名以示区别。
3.由于所有属性名都是同名属性,因此必须使用别名前缀。
四、外连接(Outer Join)
外连接与普通连接的区别
① 普通连接操作只输出满足连接条件的元组
② 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
③在表名后面加外连接操作符(*)或(+)指定非主体表
④非主体表有一“万能”的虚行,该行全部由空值组成
⑤虚行可以和主体表中所有不满足连接条件的元组进行连接
⑥由于虚行各列全部是空值,因此与虚行连接的结果中,来自非主体表的属性值全部是空值
注意:
五、复合条件连接
WHERE子句中含多个连接条件时,称为复合条件连接
1.嵌套查询概述
- 一个SELECT-FROM-WHERE语句称为一个查询块
- 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
- 子查询的限制:不能使用ORDER BY子句
- 层层嵌套方式反映了 SQL语言的结构化
- 有些嵌套查询可以用连接运算替代
2. 不相关子查询
子查询的查询条件不依赖于父查询,是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。
3.相关子查询
子查询的查询条件依赖于父查询
①首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;②然后再取外层表的下一个元组;③重复这一过程,直至外层表全部检查完为止。
引出子查询的谓词
- 带有IN谓词的子查询
- 带有比较运算符的子查询
- 带有ANY或ALL谓词的子查询
- 带有EXISTS谓词的子查询
⒈带有IN谓词的子查询
⒉带有比较运算符的子查询
- 当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。
- 与ANY或ALL谓词配合使用
⒊带有ANY或ALL谓词的子查询
谓词语义
ANY:任意一个值 ALL:所有值
需要配合使用比较运算符
⒋带有EXISTS谓词的子查询
- 1. EXISTS谓词
- 存在量词
- 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
- 若内层查询结果非空,则外层的WHERE子句返回真值
- 若内层查询结果为空,则外层的WHERE子句返回假值
- 由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义
- 2. NOT EXISTS谓词
- 若内层查询结果非空,则外层的WHERE子句返回假值
- 若内层查询结果为空,则外层的WHERE子句返回真值
3. 不同形式的查询间的替换
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换
所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。
5.用EXISTS/NOT EXISTS实现全称量词(难点)
-
- SQL语言中没有全称量词" (For all)
- 可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:
("x)P ≡ Ø ($ x(Ø P))
6. 用EXISTS/NOT EXISTS实现逻辑蕴函(难点)
- SQL语言中没有蕴函(Implication)逻辑运算
- 可以利用谓词演算将逻辑蕴函谓词等价转换为:
p ® q ≡ Ø p∨q
3.3.5 集合查询
标准SQL直接支持的集合操作种类:并操作(UNION)
一般商用数据库支持的集合操作种类
并操作(UNION)
交操作(INTERSECT)
差操作(MINUS)
1. 并操作
- 形式 <查询块> UNION <查询块>
注意:参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同
2. 交操作
标准SQL中没有提供集合交操作,但可用其他方法间接实现。
3. 差操作
4. 对集合操作结果的排序
- ORDER BY子句只能用于对最终查询结果排序,不能对中间结果排序
- 任何情况下,ORDER BY子句只能出现在最后
- 对集合操作结果排序时,ORDER BY子句中用数字指定排序属性
3.4 数据更新
3.4.1 插入数据
2. 插入子查询结果
3.4.2 修改数据
三种修改方式
- 修改某一个元组的值
- 修改多个元组的值
- 带子查询的修改语句
SET子句 指定修改方式
要修改的列
修改后取值
WHERE子句 指定要修改的元组
缺省表示要修改表中的所有元组
DBMS在执行修改语句时会检查修改操作
是否破坏表上已定义的完整性规则
-
- 实体完整性
- 主码不允许修改
- 用户定义的完整性
- NOT NULL约束
- UNIQUE约束
- 值域约束
DELETE
FROM <表名>
[WHERE <条件>];
- 功能
- 删除指定表中满足WHERE子句条件的元组
- WHERE子句
- 指定要删除的元组
- 缺省表示要修改表中的所有元组
- 三种删除方式
- 删除某一个元组的值
- 删除多个元组的值
- 带子查询的删除语句
DBMS在执行插入语句时会检查所插元组
是否破坏表上已定义的完整性规则
- 参照完整性
- 不允许删除
- 级联删除
更新数据与数据一致性
DBMS在执行插入、删除、更新语句时必须保证数据库一致性
- 必须有事务的概念和原子性
- 完整性检查和保证
3.5 视 图
视图的特点
- 虚表,是从一个或几个基本表(或视图)导出的表
- 只存放视图的定义,不会出现数据冗余
- 基表中的数据发生变化,从视图中查询出的数据也随之改变
基于视图的操作
- 查询
- 删除
- 受限更新
- 定义基于该视图的新视图
1. 建立视图
DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。组成视图的属性列名全部省略或全部指定。
省略:
由子查询中SELECT目标列中的诸字段组成明确指定视图的所有列名:
(1) 某个目标列是集函数或列表达式
(2) 目标列为 *
(3) 多表连接时选出了几个同名列作为视图的字段
(4) 需要在视图中为某个列启用新的更合适的名字
WITH CHECK OPTION
透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)带表达式的视图。
定义一个反映学生出生年份的视图。
设置一些派生属性列, 也称为虚拟列--Sbirth
带表达式的视图必须明确定义组成视图的各个属性列名
一类不易扩充的视图:以 SELECT * 方式创建的视图可扩充性差,应尽可能避免
2. 删除视图
3.5.2 查询视图
- 从用户角度:查询视图与查询基本表相同
- DBMS实现视图查询的方法
- 实体化视图(View Materialization)
- 有效性检查:检查所查询的视图是否存在
- 执行视图定义,将视图临时实体化,生成临时表
- 查询视图转换为查询临时表
- 查询完毕删除被实体化的视图(临时表)
- 视图消解法(View Resolution)
- 进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义
- 把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询
- 执行修正后的查询
- 实体化视图(View Materialization)
3.5.3 更新视图
- 用户角度:更新视图与更新基本表相同
- DBMS实现视图更新的方法
- 视图实体化法(View Materialization)
- 视图消解法(View Resolution)
- 指定WITH CHECK OPTION子句后
DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更
更新视图的限制
- 一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此)
- 允许对行列子集视图进行更新
- 对其他类型视图的更新不同系统有不同限制
3.5.4 视图的作用
(四)数据库安全性
4.1授权
4.2 收回权限
数据控制亦称为数据保护,包括数据的:
- 安全性控制
- 完整性控制
- 并发控制
- 恢复
SQL语言的数据控制功能
SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的完全性、完整性,并提供了一定的并发控制及恢复能力。
1. 完整性
- 数据库的完整性是指数据库中数据的正确性与相容性。
- SQL语言定义完整性约束条件
CREATE TABLE语句
ALTER TABLE语句
- 码
- 其他约束条件
- 参照完整性
- 取值唯一的列
2. 并发控制
- 并发控制: 当多个用户并发地对数据库进行操作时,对他们加以控制、协调,以保证并发操作正确执行,保持数据库的一致性。
- SQL语言并发控制能力: 提供事务、事务开始、事务结束、提交等概念
3. 恢复
- 恢复: 当发生各种类型的故障导致数据库处于不一致状态时,将数据库恢复到一致状态的功能。
- SQL语言恢复功能:提供事务回滚、重做等概念 (UNDO、REDO)
4. 安全性
- 安全性:保护数据库,防止不合法的使用所造成的数据泄露和破坏。
- 保证数据安全性的主要措施
存取控制:控制用户只能存取他有权存取的数据
规定不同用户对于不同数据对象所允许执行的操作
DBMS实现数据安全性保护的过程
- 用户或DBA把授权决定告知系统
- SQL的GRANT和REVOKE
- DBMS把授权的结果存入数据字典
- 当用户提出操作请求时,DBMS根据授权定义进行检查,以决定是否执行操作请求
41 授 权
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
- 谁定义?DBA和表的建立者(即表的属主)
- REVOKE功能:将对指定操作对象的指定操作权限授予指定的用户。
(1) 操作权限
(2) 用户的权限
- 建表(CREATETAB)的权限:属于DBA
- DBA授予-->普通用户
- 基本表或视图的属主拥有对该表或视图的一切操作权限
- 接受权限的用户:
一个或多个具体用户
PUBLIC(全体用户)
(3) WITH GRANT OPTION子句
指定了WITH GRANT OPTION子句:
获得某种权限的用户还可以把这种权限再授予别的用户。
2.没有指定WITH GRANT OPTION子句:
获得某种权限的用户只能使用该权限,不能传播该权限
查询Student表权限授给用户U1
把对Student表和Course表的全部权限授予用户U2和U3
4.2 收回权限
- REVOKE语句的一般格式为:
功能:从指定用户那里收回对指定对象的指定权限
第4章 数据库安全性
数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一
4.1 计算机安全性概论
什么是计算机系统安全性
为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。
技术安全
指计算机系统中采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护,当计算机系统受到无意或恶意的攻击时仍能保证系统正常运行,保证系统内的数据不增加、不丢失、不泄露。
管理安全
软硬件意外故障、场地的意外事故、管理不善导致的计算机设备和数据介质的物理破坏、丢失等安全问题
政策法律类
政府部门建立的有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令。
安全标准简介
发展历史:
安全标准简介
TCSEC/TDI安全级别划分
R1 安全策略(Security Policy)
R1.1 自主存取控制 (Discretionary Access Control,简记为DAC)
R1.2 客体重用(Object Reuse)
R1.3 标记(Labels)
R1.4 强制存取控制(Mandatory Access Control,简记为MAC)
2.R2 责任(Accountability)
R2.1 标识与鉴别(Identification & Authentication)
R2.2 审计(Audit)
3.R3 保证(Assurance)
R3.1 操作保证(Operational Assurance)
R3.2 生命周期保证(Life Cycle Assurance)
R4 文档(Documentation)
R4.1 安全特性用户指南(Security Features User's Guide)
R4.2 可信设施手册(Trusted Facility Manual)
R4.3 测试文档(Test Documentation)
R4.4 设计文档(Design Documentation)
CC评估保证级划分
数据库安全性控制
- 数据库安全性控制的常用方法
- 用户标识和鉴定
- 存取控制
- 视图
- 审计
- 密码存储
用户标识与鉴别
- 用户标识与鉴别(Identification & Authentication)
系统提供的最外层安全保护措施
基本方法
- 系统提供一定的方式让用户标识自己的名字或身份;
- 系统内部记录着所有合法用户的标识;
- 每次用户要求进入系统时,由系统核对用户提供的身份标识;
- 通过鉴定后才提供机器使用权。
- 用户标识和鉴定可以重复多次
存取控制
- 存取控制机制的功能
- 存取控制机制的组成
- 定义存取权限
- 检查存取权限
- 存取控制机制的组成
用户权限定义和合法权检查机制一起组成了DBMS的安全子系统
常用存取控制方法
自主存取控制的特点
- 同一用户对于不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可将其拥有的存取权限转授给其他用户
强制存取控制的特点
- 每一个数据对象被标以一定的密级
- 每一个用户也被授予某一个级别的许可证
- 对于任意一个对象,只有具有合法许可证的用户才可以存取
自主存取控制方法
授权与回收
回收:
SQL灵活的授权机制
关系数据库中授权的数据对象粒度
- 行
- 属性列
- 表
- 数据库
强制存取控制方法
什么是强制存取控制
- 强制存取控制(MAC)是指系统为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略的要求,所采取的强制存取检查手段。
- MAC不是用户能直接感知或进行控制的。
主体与客体
- 在MAC中,DBMS所管理的全部实体被分为主体和客体两大类
- 主体是系统中的活动实体
- DBMS所管理的实际用户
- 代表用户的各进程
- 客体是系统中的被动实体,是受主体操纵的
- 文件
- 基表
- 索引
- 视图
视图机制
- 视图机制与授权机制配合使用:
- 首先用视图机制屏蔽掉一部分保密数据
- 视图上面再进一步定义存取权限
- 间接实现了支持存取谓词的用户权限定义
审计
审计的定义
审计功能的可选性:①审计很费时间和空间 ②DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能。
4.2.8 数据加密
- 加密方法
- 替换方法
- 使用密钥(Encryption Key)将明文中的每一个字符转换为密文中的一个字符
- 置换方法
- 将明文的字符按不同的顺序重新排列
- 混合方法
- 替换方法
.
美国1977年制定的官方加密标准:数据加密标准(Data Encryption Standard,简称DES)
文章干货多多,欢迎一键三连,谢谢😊😊