资源描述
数据库技术总结
数据(Data):是数据库中存储的基本对象
数据的定义:描述事物的符号记录
数据的种类:文字、图形、图象、声音等
数据的特点:数据与其语义是不可分的
数据库(Database,简称DB):是长期储存在计算机内、有组织的、可共享的大量数据集合
数据库的特征:
n 数据按一定的数据模型组织、描述和储存
n 可为各种用户共享
n 冗余度较小
n 数据独立性较高
n 易扩展
数据库管理系统(Database Management System,简称DBMS):是位于用户与操作系统之间的一层数据管理软件。
DBMS的用途:科学地组织和存储数据、高效地获取和维护数据
DBMS的主要功能:
数据库的运行管理
保证数据的安全性、完整性、
多用户对数据的并发使用
发生故障后的系统恢复
n 数据库的建立和维护功能(实用程序)
数据库数据批量装载
数据库转储
介质故障恢复
数据库的重组织
性能监视等
数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。
n 数据库系统的构成
n 由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员(和用户)构成。
n 数据管理
n 对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题
数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。
n 数据模型应满足三方面要求
n 能比较真实地模拟现实世界
n 容易为人所理解
n 便于在计算机上实现
n 数据模型分成两个不同的层次
(1) 概念模型也称信息模型,它是按用户的观点来对数据和信息建模。
(2) 数据模型主要包括网状模型、层次模型、关系模型等,它是按计算机系统的观点对数据建模。
n 客观对象的抽象过程---两步抽象
n 现实世界中的客观对象抽象为概念模型;
n 把概念模型转换为某一DBMS支持的数据模型。
n 数据结构
n 对象类型的集合
数据结构是对系统静态特性的描述
n 两类对象
n 与数据类型、内容、性质有关的对象
n 与数据之间联系有关的对象
n 数据操作
n 对数据库中各种对象(型)的实例(值)允许执行的操作及有关的操作规则
n 数据操作的类型
n 检索
n 更新(包括插入、删除、修改)
n 数据模型对操作的定义
n 操作的确切含义
n 操作符号
n 操作规则(如优先级)
n 实现操作的语言
n 数据操作是对系统动态特性的描述。
n 数据模型对约束条件的定义
n 反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。
提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。
信息世界中的基本概念
(1) 实体(Entity)
客观存在并可相互区别的事物称为实体。
(2) 属性(Attribute)
实体所具有的某一特性称为属性。
一个实体可以由若干个属性来刻画。
(3) 码(Key)
唯一标识实体的属性集称为码。
(4) 域(Domain)
属性的取值范围称为该属性的域。
(5) 实体型(Entity Type)
用实体名及其属性名集合来抽象和刻画
同类实体称为实体型
(6) 实体集(Entity Set)
同型实体的集合称为实体集
联系(Relationship)
现实世界中事物内部以及事物之间的联系在信息世界
中反映为实体内部的联系和实体之间的联系
实体型间联系
两个实体型一对一联系(1:1)
三个实体型一对多联系(1:n)
一个实体型多对多联系(m:n)
两个实体型间的联系
n 一对一联系
n 如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。记为1:1。
n 一对多联系
n 如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系
记为1:n
n 多对多联系(m:n)
n 如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系。记为m:n
概念模型的表示方法
n 实体-联系方法(E-R方法)
n 用E-R图来描述现实世界的概念模型
n E-R方法也称为E-R模型
常用数据模型
n 非关系模型
n 层次模型(Hierarchical Model)
n 网状模型(Network Model )
n 数据结构:以基本层次联系为基本单位
基本层次联系:两个记录以及它们之间的一对多(包括一对一)的联系
n 关系模型(Relational Model)
n 数据结构:表
n 面向对象模型(Object Oriented Model)
n 数据结构:对象
n 层次模型
满足下面两个条件的基本层次联系的集合为层次模型。
1. 有且只有一个结点没有双亲结点,这个结点称为根
结点
2. 根以外的其它结点有且只有一个双亲结点
n 表示方法
实体型:用记录类型描述。
每个结点表示一个记录类型。
属性:用字段描述。每个记录类型可包含若干个字段。
联系:用结点之间的连线表示记录(类)型之间的
一对多的联系
网状数据模型的数据结构
n 网状模型
满足下面两个条件的基本层次联系的集合为网状模型。
1. 允许一个以上的结点无双亲;
2. 一个结点可以有多于一个的双亲。
n 表示方法(与层次数据模型相同)
实体型:用记录类型描述。
每个结点表示一个记录类型。
属性:用字段描述。
每个记录类型可包含若干个字段。
联系:用结点之间的连线表示记录(类)型之
间的一对多的父子联系。
关系模型的基本概念
n 关系(Relation)
一个关系对应通常说的一张表。
n 元组(Tuple)
表中的一行即为一个元组。
n 属性(Attribute)
表中的一列即为一个属性,给每一个属性起一个名称即属性名。
n 关系必须是规范化的,满足一定的规范条件
最基本的规范条件:关系的每一个分量必须是一个不
可分的数据项。
n 查询、插入、删除、更新
n 数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合
n 存取路径对用户隐蔽,用户只要指出“干什么”,不必详细说明“怎么干”
关系模型的完整性约束
n 实体完整性
n 参照完整性
n 用户定义的完整性
关系数据模型的存储结构
n 表以文件形式存储
n 有的DBMS一个表对应一个操作系统文件
n 有的DBMS自己设计文件结构
关系模型的优缺点
n 优点
n 建立在严格的数学概念的基础上
n 概念单一。数据结构简单、清晰,用户易懂易用
n 实体和各类联系都用关系来表示。
n 对数据的检索结果也是关系。
n 关系模型的存取路径对用户透明
n 具有更高的数据独立性,更好的安全保密性
n 简化了程序员的工作和数据库开发建立的工作
n 缺点
存取路径对用户透明导致查询效率往往不如非
关系数据模型
为提高性能,必须对用户的查询请求进行优化
增加了开发数据库管理系统的难度
数据库系统外部的体系结构
n 单用户结构
n 主从式结构
n 分布式结构
n 客户/服务器结构
n 浏览器/应用服务器/数据库服务器结构
分布式结构的数据库系统
n 数据库中的数据在逻辑上是一个整体,但物理地分布在计算机网络的不同结点上。
n 网络中的每个结点都可以独立处理本地数据库中的数据,执行局部应用
n 同时也可以同时存取和处理多个异地数据库中的数据,执行全局应用
n 优点
n 适应了地理上分散的公司、团体和组织对于数据库应用的需求。
n 缺点
n 数据的分布存放给数据的处理、管理与维护带来困难。
n 当用户需要经常访问远程数据时,系统效率会明显地受到网络传输的制约
数据库管理员(DBA)
n 决定数据库中的信息内容和结构
n 决定数据库的存储结构和存取策略
n 定义数据的安全性要求和完整性约束条件
关系数据库
n 关系模型的组成
n 关系数据结构
n 关系操作集合
n 关系完整性约束
n 1) 常用的关系操作
n 查询
n 选择、投影、连接、除、并、交、差
n 数据更新
n 插入、删除、修改
n 查询的表达能力是其中最主要的部分
n 2) 关系操作的特点
n 集合操作方式,即操作的对象和结果都是集合。
n 非关系数据模型的数据操作方式:一次一记录
n 文件系统的数据操作方式
n 3) 关系数据语言的种类
n 关系代数语言
n 用对关系的运算来表达查询要求
n 4) 关系数据语言的特点
n 关系语言是一种高度非过程化的语言
n 存取路径的选择由DBMS的优化机制来完成
n 用户不必用循环结构就可以完成数据操作
n 能够嵌入高级语言中使用
n 关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价
关系
n ⒈域(Domain)
n 2. 笛卡尔积(Cartesian Product)
n 3. 关系(Relation)
n 域是一组具有相同数据类型的值的集合。例:
n 整数
n 实数
n 介于某个取值范围的整数
n 长度指定长度的字符串集合
n {‘男’,‘女’}
n 介于某个取值范围的日期
3.2 数据定义
3.2.1定义语句格式
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] );
n <表名>:所要定义的基本表的名字
n <列名>:组成该表的各个属性(列)
n <列级完整性约束条件>:涉及相应属性列的完整性约束条件
n <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
n 常用完整性约束
n 主码约束: PRIMARY KEY
n 唯一性约束:UNIQUE
n 非空值约束:NOT NULL
n 参照完整性约束
三、删除基本表
DROP TABLE <表名>;
基本表删除数据、表上的索引都删除
表上的视图往往仍然保留,但无法引用
删除基本表时,系统会从数据字典中删去有关该
基本表及其索引的描述
(标准中没有,认为表建立后就永久存在)
二、修改基本表
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ MODIFY <列名> <数据类型> ];
n <表名>:要修改的基本表
n ADD子句:增加新列和新的完整性约束条件
n DROP子句:删除指定的完整性约束条件
n MODIFY子句:用于修改列名和数据类型
ALTER TABLE Student ADD Scome DATE;
不论基本表中原来是否已有数据,新增加的列一律为空值。
n 删除属性列
直接/间接删除
n 把表中要保留的列及其内容复制到一个新表中
n 删除原表
n 再将新表重命名为原表名
直接删除属性列:(新)
例:ALTER TABLE Student Drop Scome;
ALTER TABLE Student MODIFY Sage SMALLINT;
n 注:修改原有的列定义有可能会破坏已有数据
建立与删除索引
n 建立索引是加快查询速度的有效手段
n 建立索引
n DBA或表的属主(即建立表的人)根据需要建立
n 有些DBMS自动建立以下列上的索引
n PRIMARY KEY
n UNIQUE
n 维护索引
n DBMS自动完成
n 使用索引
n DBMS自动选择是否使用索引以及使用哪些索引
一、建立索引
n 语句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
n 用<表名>指定要建索引的基本表名字
n 索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
n 用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
n UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
n CLUSTER表示要建立的索引是聚簇索引
n 唯一值索引
n 对于已含重复值的属性列不能建UNIQUE索引
n 对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束
n 聚簇索引
n 建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致
例:
CREATE CLUSTER INDEX StusnameON
Student(Sname);
在Student表的Sname(姓名)列上建立一个聚簇索引,而
且Student表中的记录将按照Sname值的升序存放
n 在一个基本表上最多只能建立一个聚簇索引
n 聚簇索引的用途:对于某些类型的查询,可以提高查询效率
n 聚簇索引的适用范围
n 很少对基表进行增删操作
n 很少对其中的变长列进行修改操作
二、删除索引
DROP INDEX <索引名>;
n 删除索引时,系统会从数据字典中删去有关该索引的描述。
3.3 查询
n 语句格式
SELECT [ALL|DISTINCT] <目标列表达式>
[,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
n SELECT子句:指定要显示的属性列
n FROM子句:指定查询对象(基本表或视图)
n WHERE子句:指定查询条件
n GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
n HAVING短语:筛选出只有满足指定条件的组
n ORDER BY子句:对查询结果表按指定列值的升序或降序排序
3.3.2单表查询
查询仅涉及一个表,是一种最简单的查询操作
一、选择表中的若干列
二、选择表中的若干元组
三、对查询结果排序
四、使用集函数
五、对查询结果分组
查询经过计算的值
SELECT子句的<目标列表达式>为表达式
n 算术表达式
n 字符串常量
n 函数
n 列别名
n 等
二、选择表中的若干元组
n 消除取值重复的行
n 查询满足条件的元组
1. 消除取值重复的行
n 在SELECT子句中使用DISTINCT短语
假设SC表中有下列数据
2.查询满足条件的元组
WHERE子句常用的查询条件
(1) 比较大小
在WHERE子句的<比较条件>中使用比较运算符
n =,>,<,>=,<=,!= 或 <>,!>,!<,
n 逻辑运算符NOT + 比较运算符
(2) 确定范围
n 使用谓词 BETWEEN … AND …
NOT BETWEEN … AND …
(3) 确定集合
使用谓词 IN <值表>, NOT IN <值表>
<值表>:用逗号分隔的一组取值
(4) 字符串匹配
n [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]
<匹配串>:指定匹配模板
匹配模板:固定字符串或含通配符的字符串
当匹配模板为固定字符串时,
可以用 = 运算符取代 LIKE 谓词
用 != 或 < >运算符取代 NOT LIKE 谓词
通配符
w % (百分号) 代表任意长度(长度可以为0)的字符串
n 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
² _ (下横线) 代表任意单个字符
n 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design'
ESCAPE '\'
(5) 涉及空值的查询
n 使用谓词 IS NULL 或 IS NOT NULL
n “IS NULL” 不能用 “= NULL” 代替
(6) 多重条件查询
用逻辑运算符AND和 OR来联结多个查询条件
n AND的优先级高于OR
n 可以用括号改变优先级
可用来实现多种其他谓词
n [NOT] IN
n [NOT] BETWEEN … AND …
三、对查询结果排序
使用ORDER BY子句
n 可以按一个或多个属性列排序
n 升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
n ASC:排序列为空值的元组最后显示
n DESC:排序列为空值的元组最先显示
四、使用集函数
5类主要集函数
n 计数
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
n 计算总和
SUM([DISTINCT|ALL] <列名>)
n 计算平均值
AVG([DISTINCT|ALL] <列名>)
求最大值
MAX([DISTINCT|ALL] <列名>)
求最小值
MIN([DISTINCT|ALL] <列名>)
– DISTINCT短语:在计算时要取消指定列中的重复值
– ALL短语:不取消重复值
– ALL为缺省值
五、对查询结果分组
使用GROUP BY子句分组
细化集函数的作用对象
n 未对查询结果分组,集函数将作用于整个查询结果
n 对查询结果分组后,集函数将分别作用于每个组
n GROUP BY子句的作用对象是查询的中间结果表
n 分组方法:按指定的一列或多列值分组,值相等的为一组
n 使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数
使用HAVING短语筛选最终输出结果
n 只有满足HAVING短语指定条件的组才输出
n HAVING短语与WHERE子句的区别:作用对象不同
n WHERE子句作用于基表或视图,从中选择满足条件的元组。
n HAVING短语作用于组,从中选择满足条件的组。
连接查询
同时涉及多个表的查询称为连接查询
用来连接两个表的条件称为连接条件或连接谓词
一般格式:
n [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
比较运算符:=、>、<、>=、<=、!=
n [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>
n 连接字段
n 连接谓词中的列名称为连接字段
n 连接条件中的各连接字段类型必须是可比的,但不必是相同的
连接操作的执行过程
n 嵌套循环法(NESTED-LOOP)
n 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。
n 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。
n 重复上述操作,直到表1中的全部元组都处理完毕
排序合并法(SORT-MERGE)
常用于=连接
n 首先按连接属性对表1和表2排序
n 对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续
n 找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直接遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续
n 重复上述操作,直到表1或表2中的全部元组都处理完毕为止
索引连接(INDEX-JOIN)
n 对表2按连接字段建立索引
n 对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组
SQL中连接查询的主要类型
n 广义笛卡尔积
n 等值连接(含自然连接)
n 非等值连接查询
n 自身连接查询
n 外连接查询
n 复合条件连接查询
一、广义笛卡尔积
n 不带连接谓词的连接
n 很少使用
二、等值与非等值连接查询
等值连接
n 连接运算符为 = 的连接操作
n [<表名1>.]<列名1> = [<表名2>.]<列名2>
n 任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀。
自然连接
n 等值连接的一种特殊情况,把目标列中重复的属性列去掉。
非等值连接查询
连接运算符不是 = 的连接操作
三、自身连接
n 一个表与其自己进行连接,称为表的自身连接
n 需要给表起别名以示区别
n 由于所有属性名都是同名属性,因此必须使用别名前缀
四、外连接(Outer Join)
n 外连接与普通连接的区别
n 普通连接操作只输出满足连接条件的元组
n 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
n 在表名后面加外连接操作符(*)或(+)指定非主体表
n 非主体表有一“万能”的虚行,该行全部由空值组成
n 虚行可以和主体表中所有不满足连接条件的元组进行连接
n 由于虚行各列全部是空值,因此与虚行连接的结果中,来自非主体表的属性值全部是空值
n 左外连接
n 外连接符出现在连接条件的左边
n 右外连接
n 外连接符出现在连接条件的右边
五、复合条件连接
WHERE子句中含多个连接条件时,称为复合条件连接
n 嵌套查询概述
n 一个SELECT-FROM-WHERE语句称为一个查询块
n 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
n 子查询的限制
n 不能使用ORDER BY子句
n 层层嵌套方式反映了 SQL语言的结构化
n 有些嵌套查询可以用连接运算替代
n 不相关子查询
子查询的查询条件不依赖于父查询
n 相关子查询
子查询的查询条件依赖于父查询
n 不相关子查询
是由里向外逐层处理。即每个子查询在
上一级查询处理之前求解,子查询的结果
用于建立其父查询的查找条件。
n 相关子查询
n 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;
n 然后再取外层表的下一个元组;
n 重复这一过程,直至外层表全部检查完为止
引出子查询的谓词
n 带有IN谓词的子查询
n 带有比较运算符的子查询
n 带有ANY或ALL谓词的子查询
n 带有EXISTS谓词的子查询
一、带有IN谓词的子查询
二、带有比较运算符的子查询
● 当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。
n 与ANY或ALL谓词配合使用
三、带有ANY或ALL谓词的子查询
谓词语义
n ANY:任意一个值
n ALL:所有值
需要配合使用比较运算符
> ANY 大于子查询结果中的某个值
> ALL 大于子查询结果中的所有值
< ANY 小于子查询结果中的某个值
< ALL 小于子查询结果中的所有值
>= ANY 大于等于子查询结果中的某个值
>= ALL 大于等于子查询结果中的所有值
<= ANY 小于等于子查询结果中的某个值
<= ALL 小于等于子查询结果中的所有值
= ANY 等于子查询结果中的某个值
=ALL 等于子查询结果中的所有值(通常没有实际意义)
!=(或<>)ANY 不等于子查询结果中的某个值
!=(或<>)ALL 不等于子查询结果中的任何一个值
四、带有EXISTS谓词的子查询
1. EXISTS谓词
2. NOT EXISTS谓词
3. 不同形式的查询间的替换
4. 相关子查询的效率
5. 用EXISTS/NOT EXISTS实现全称量词
6. 用EXISTS/NOT EXISTS实现逻辑蕴函
● 1. EXISTS谓词
– 存在量词$
– 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
● 若内层查询结果非空,则返回真值
● 若内层查询结果为空,则返回假值
– 由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义
● 2. NOT EXISTS谓词
3. 不同形式的查询间的替换
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换
所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。
5.用EXISTS/NOT EXISTS实现全称量词(难点)
n SQL语言中没有全称量词" (For all)
n 可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:
("x)P ≡Ø ($ x(Ø P))
6. 用EXISTS/NOT EXISTS实现逻辑蕴函(难点)
n SQL语言中没有蕴函(Implication)逻辑运算
n 可以利用谓词演算将逻辑蕴函谓词等价转换为:
p ® q ≡Ø p∨q
3.3.5 集合查询
标准SQL直接支持的集合操作种类
并操作(UNION)
一般商用数据库支持的集合操作种类
并操作(UNION)
交操作(INTERSECT)
差操作(MINUS)
1.并操作
n 形式
<查询块>
UNION
<查询块>
n 参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同
2.交操作
标准SQL中没有提供集合交操作,但可用其他方法间接实现。
3.差操作
4. 对集合操作结果的排序
n ORDER BY子句只能用于对最终查询结果排序,不能对中间结果排序
n 任何情况下,ORDER BY子句只能出现在最后
n 对集合操作结果排序时,ORDER BY子句中用数字指定排序属性
n
3.4 数据更新
3.4.1插入数据
n 两种插入数据方式
n 插入单个元组
n 插入子查询结果
1. 插入单个元组
n 语句格式
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>] … )
n 功能
将新元组插入指定表中。
n INTO子句
n 指定要插入数据的表名及属性列
n 属性列的顺序可与表定义中的顺序不一致
n 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
n 指定部分属性列:插入的元组在其余属性列上取空值
n VALUES子句
n 提供的值必须与INTO子句匹配
> 值的个数
> 值的类型
2. 插入子查询结果
n 语句格式
INSERT
INTO <表名> [(<属性列1> [,<属性列2>… )]
子查询;
n 功能
将子查询结果插入指定表中
INSERT
INTO Deptage(Sdept,Avgage)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
n INTO子句(与插入单条元组类似)
n 指定要插入数据的表名及属性列
n 属性列的顺序可与表定义中的顺序不一致
n 没有指定属性列:表示要插入的是一条完整的元组
n 指定部分属性列:插入的元组在其余属性列上取空值
n 子查询
n SELECT子句目标列必须与INTO子句匹配
n 值的个数
n 值的类型
3.4.2修改数据
n 语句格式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
n 功能
修改指定表中满足WHERE子句条件的元组
n 三种修改方式
n 修改某一个元组的值
n 修改多个元组的值
n 带子查询的修改语句
UPDATE SC
SET Grade=0
WHERE 'CS'=
(SELETE Sdept
FROM Student
WHERE Student.Sno = SC.Sno);
n SET子句
指定修改方式
要修改的列
修改后取值
n WHERE子句
指定要修改的元组
缺省表示要修改表中的所有元组
DBMS在执行修改语句时会检查修改操作
是否破坏表上已定义的完整性规则
n 实体完整性
n 主码不允许修改
n 用户定义的完整性
n NOT NULL约束
n UNIQUE约束
n 值域约束
DELETE
FROM <表名>
[WHERE <条件>];
– 功能
w 删除指定表中满足WHERE子句条件的元组
– WHERE子句
w 指定要删除的元组
w 缺省表示要修改表中的所有元组
– 三种删除方式
w 删除某一个元组的值
w 删除多个元组的值
w 带子查询的删除语句
DBMS在执行插入语句时会检查所插元组
是否破坏表上已定义的完整性规则
– 参照完整性
• 不允许删除
• 级联删除
更新数据与数据一致性
DBMS在执行插入、删除、更新语句时必
须保证数据库一致性
l 必须有事务的概念和原子性
l 完整性检查和保证
3.5 视图
视图的特点
n 虚表,是从一个或几个基本表(或视图)导出的表
n 只存放视图的定义,不会出现数据冗余
n 基表中的数据发生变化,从视图中查询出的数据也随之改变
基于视图的操作
n 查询
n 删除
n 受限更新
n 定义基于该视图的新视图
1. 建立视图
n 语句格式
CREATE VIEW
<视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
DBMS执行CREATE VIEW语句时只是把
视图的定义存入数据字典,并不执行其中
的SELECT语句。
在对视图查询时,按视图的定义从基本表
中将数据查出。
组成视图的属性列名
全部省略或全部指定
n 省略:
由子查询中SELECT目标列中的诸字段组成
n 明确指定视图的所有列名:
(1) 某个目标列是集函数或列表达式
(2) 目标列为 *
(3) 多表连接时选出了几个同名列作为视图的字段
(4) 需要在视图中为某个列启用新的更合适的名字
n WITH CHECK OPTION
透过视图进行增删改操作时,不得破坏视
图定义中的谓词条件
(即子查询中的条件表达式)
带表达式的视图
定义一个反映学生出生年份的视图。
CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS
SELECT Sno,Sname,2000-Sage
FROM Student
设置一些派生属性列, 也称为虚拟列--Sbirth
带表达式的视图必须明确定义组成视图的各个属
性列名
n 一类不易扩充的视图
n 以 SELECT * 方式创建的视图可扩充性差,应尽可能避免
2. 删除视图
n DROP VIEW <视图名>;
n 该语句从数据字典中删除指定的视图定义
n 由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除
n 删除基表时,由该基表导出的所有视图定义都必须显式删除
3.5.2查询视图
n 从用户角度:查询视图与查询基本表相同
n DBMS实现视图查询的方法
n 实体化视图(View Materialization)
n 有效性检查:检查所查询的视图是否存在
n 执行视图定义,将视图临时实体化,生成临时表
n 查询视图转换为查询临时表
n 查询完毕删除被实体化的视图(临时表)
n 视图消解法(View Resolution)
n 进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义
n 把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询
n 执行修正后的查询
n 视图实体化法
n 视图消解法
3.5.3更新视图
n 用户角度:更新视图与更新基本表相同
n DBMS实现视图更新的方法
n 视图实体化法(View Materialization)
n 视图消解法(View Resolution)
n 指定WITH CHECK OPTION子句后
DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新
更新视图的限制
n 一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此)
n 允许对行列子集视图进行更新
n 对其他类型视图的更新不同系统有不同限制
DB2对视图更新的限制:
(1) 若视图是由两个以上基本表导出的,则此视图不允许更新。
(2) 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
若视图的字段来自集函数,则此视图不允许更新。
(4) 若视图定义中含有GROUP BY子句,则此视图不允许更新。
(5) 若视图定义中含有DISTINCT短语,则此视图不允许更新。
(6) 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。
(7) 一个不允许更
展开阅读全文