数据库技术 第二章 关系数据库 中国科学技术大学网络学院 阚卫华.

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements

2 和 5 的倍数的特征 运动热身 怎样找一个数的倍数? 从小到大写出 2 的倍数( 10 个): 写出 5 的倍数( 6 个) 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 5 , 10 , 15 , 20 , 25 , 30.
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
2 、 5 的倍数特征 集合 2 的倍数(要求) 在百数表上依次将 2 的倍数找出 并用红色的彩笔涂上颜色。
计算机软件技术基础计算机软件技术基础 数据库系统( 3 ). 第 2 页 4.3 关系数据库语言 SQL 关系数据库 SQL ( Structured Query Language )语言是关系 数据库的标准语言,对关系模型的发展和商用 DBMS 的研制起 着重要的作用。 SQL 发展历史  1986.
数据查询 单表查询 连接查询 嵌套查询 集合查询.
数据库及应用 授课教师:岳静 教学网站: Tel:
§1 二阶与三阶行列式 ★二元线性方程组与二阶行列式 ★三阶行列式
数据库原理 Database Principles 第三章 关系数据库标准语言SQL(续1).
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
An Introduction to Database System An Introduction To Database System
《高等数学》(理学) 常数项级数的概念 袁安锋
常用逻辑用语复习课 李娟.
Database Principles & Applications
数据库原理 Database Principles 第五章 数据库完整性 Database Principles.
一、原函数与不定积分 二、不定积分的几何意义 三、基本积分公式及积分法则 四、牛顿—莱布尼兹公式 五、小结
第四章 函数的积分学 第六节 微积分的基本公式 一、变上限定积分 二、微积分的基本公式.
第二章 导数与微分 第二节 函数的微分法 一、导数的四则运算 二、复合函数的微分法.
2-7、函数的微分 教学要求 教学要点.
请写出下列查询语句并给出结果 1、列出student表中所有记录的sname、sex和class列。
An Introduction to Database System An Introduction to Database System
数据库技术 第二章 关系数据库 中国科学技术大学网络学院 阚卫华.
元素替换法 ——行列式按行(列)展开(推论)
国家“十一五”规划教材 数据库原理与应用教程.
国家“十一五”规划教材 数据库原理与应用教程(第3版).
SQL SERVER 一些经典语句 1.
SPARQL若干问题的解释 刘颖颖
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
An Introduction to Database System An Introduction to Database System
An Introduction to Database System
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
第二章 Java语言基础.
Thanks for the Slides from Renmin U
第二章关系数据库 2.1关系数据库概述 2.2关系数据结构 2.3关系的完整性 2.4关系代数 2.5关系演算** 2.6关系数据库管理系统.
第一章 函数与极限.
数据库系统概论 An Introduction to Database System
计算.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
An Introduction to Database System An Introduction to Database System
第二章 关系数据库 2.1 关系数据库的基本概念 2.2 关系模型及其描述 2.3 关系代数 2.4 关系演算 本章小结.
数列.
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
VB与Access数据库的连接.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
定理21.9(可满足性定理)设A是P(Y)的协调子集,则存在P(Y)的解释域U和项解释,使得赋值函数v(A){1}。
国家“十一五”规划教材 数据库原理与应用教程(第3版).
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
1.把下面的关系模式转化为E-R图 1)系(系号,系名,电话) 2)教师(工号,姓名,性别,年龄,系号)
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第三章 函数的微分学 第二节 导数的四则运算法则 一、导数的四则运算 二、偏导数的求法.
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
2.3.运用公式法 1 —平方差公式.
主讲教师 欧阳丹彤 吉林大学计算机科学与技术学院
定义21.17:设P1=P(Y1)和P2=P(Y2),其个体变元与个体常元分别为X1,C1和 X2,C2,并且或者C1=或者C2。一个半同态映射(,):(P1,X1∪C1)→(P2,X2∪C2)是一对映射: P1→P2; : X1∪C1→X2∪C2,它们联合实现了映射p(x,c)→(p)((x),
基于列存储的RDF数据管理 朱敏
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
VB与Access数据库的连接.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
§4.5 最大公因式的矩阵求法( Ⅱ ).
RefWorks使用指南 归档、管理个人参考文献.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
关系数据库 第2章 关系数据结构 关系定义 关系性质 关系模式 关系的完整性 实体完整性 参照完整性 用户定义完整性 关系代数 关系演算
Presentation transcript:

数据库技术 第二章 关系数据库 中国科学技术大学网络学院 阚卫华

2.5 关系演算 关系演算: 种类:按谓词变元不同分类 以数理逻辑中的谓词演算为基础。 1.元组关系演算:以元组变量作为谓词变元的基本对象 2.5 关系演算 关系演算: 以数理逻辑中的谓词演算为基础。 种类:按谓词变元不同分类 1.元组关系演算:以元组变量作为谓词变元的基本对象   元组关系演算语言ALPHA;   元组关系演算。  2.域关系演算: *以域变量作为谓词变元的基本对象; 域关系演算语言QBE。 2018年9月20日星期四

三类关系运算的表达能力 理论上已经证明: 每一个关系代数表达式有一个等价的安全的元组演算表达式。  三类关系运算的表达能力 理论上已经证明:    每一个关系代数表达式有一个等价的安全的元组演算表达式。    每一个安全的元组演算表达式有一个等价的安全的域演算表达式。    每一个安全的域演算表达式有一个等价的关系代数表达式。    因此,这三类关系运算的表达能力是等价的,可以互相转换。 2018年9月20日星期四

2.5.1 元组关系演算语言ALPHA     元组关系演算语言ALPHA :由E.F.Codd提出的典型的元组关系演算语言,该语言虽然没有实际实现,但INGRES所用的QUEL语言是参照ALPHA语言研制的。  语句主要有 一、检索语句:GET 二、更新语句: PUT,HOLD,UPDATE,DELETE,DROP 2018年9月20日星期四

一、检索操作 语句格式: GET 工作空间名 [(定额)](表达式1) [:操作条件] [DOWN/UP 表达式2]  语句格式: GET 工作空间名 [(定额)](表达式1) [:操作条件] [DOWN/UP 表达式2]  定额:规定检索的元组个数 格式: 数字 表达式1:指定语句的操作对象 格式: 关系名| 关系名. 属性名| 元组变量. 属性名| 集函数 [,… ] 操作条件:将操作结果限定在满足条件的元组中 格式: 逻辑表达式 表达式2:指定排序方式 格式: 关系名. 属性名| 元组变量. 属性名[,… ] 2018年9月20日星期四

检索操作 (续) (1) 简单检索(即不带条件的检索) (2) 限定的检索(即带条件的检索) (3) 带排序的检索 (4) 带定额的检索   (1) 简单检索(即不带条件的检索) (2) 限定的检索(即带条件的检索) (3) 带排序的检索 (4) 带定额的检索 (5) 用元组变量的检索 (6) 用存在量词的检索 2018年9月20日星期四

检索操作 (续) (7) 带有多个关系的表达式的检索 (8) 用全称量词的检索 (9) 用两种量词的检索 (10) 用蕴函(Implication)的检索 (11) 集函数 2018年9月20日星期四

(1)简单检索(续) 格式 GET 工作空间名 (表达式1) 例1 查询所有被选修的课程号码。 GET W (SC.Cno) 例1 查询所有被选修的课程号码。 GET W (SC.Cno)  例2 查询所有学生的数据。 GET W (Student) 2018年9月20日星期四

检索操作 (续) (2)限定的检索 格式: GET 工作空间名(表达式1):操作条件 例3 查询信息系(IS)中年龄小于20岁的学生的学号和年龄。 GET W (Student.Sno,Student.Sage): Student.Sdept='IS'∧ Student.Sage<20 2018年9月20日星期四

(3)带排序的检索 格式 GET 工作空间名(表达式1)[:操作条件] DOWN/UP 表达式2   例4 查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序。 GET W (Student.Sno,Student.Sage): Student.Sdept='CS ' DOWN Student.Sage 2018年9月20日星期四

(4)带定额的检索 格式 : GET 工作空间名(定额)(表达式1) [:操作条件] [DOWN/UP 表达式2] 例5 取出一个信息系学生的学号。 GET W(1) (Student.Sno): Student.Sdept='IS'  例6 查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序。 GET W (3) (Student.Sno,Student.Sage): Student.Sdept='IS' DOWN Student.Sage 所谓带定额的检索是指规定了检索出元组的个数,方法是:在W后括号中加上定额数量. W(1) W (3) 2018年9月20日星期四

(5)用元组变量的检索 元组变量的含义 表示可以在某一关系范围内变化(也称为范围变量Range Variable) 元组变量的用途 ① 简化关系名:设一个较短名字的元组变量来代替较长的关系名。 ② 操作条件中使用量词时必须用元组变量。 2018年9月20日星期四

(5)用元组变量的检索(续) 定义元组变量 格式: RANGE 关系名 变量名 一个关系可以设多个元组变量 例7 查询信息系学生的名字 例7 查询信息系学生的名字 RANGE Student X GET W (X.Sname):X.Sdept=`IS` 注: ALPHA语言用RANGE来说明元组变量.在本例中,X 是关系Student 上的元组变量, 即用 X 代表Student,用途是简化关系名. 2018年9月20日星期四

(6) 用存在量词的检索 例8 查询选修2号课程的学生名字。 例8 查询选修2号课程的学生名字。 RANGE SC X GET W (Student.Sname): X(X.Sno=Student.Sno∧X.Cno='2') 例9 查询选修了这样课程的学生学号,其直接先行课是6号课程。 RANGE Course CX GET W (SC.Sno): CX (CX.Cno=SC.Cno∧CX.Pcno='6') 注:操作条件 中使用量词时必须用元组变量 2018年9月20日星期四

用存在量词的检索(续) 例10 查询至少选修一门其先行课为6号课程的学生名字。 RANGE Course CX SC SCX GET W (Student.Sname): SCX (SCX.Sno=Student.Sno∧ CX (CX.Cno=SCX.Cno∧CX.Pcno='6'))  前束范式形式为: GET W (Student.Sname): SCXCX (SCX.Sno=Student.Sno∧ CX.Cno=SCX.Cno∧CX.Pcno='6') 2018年9月20日星期四

(7)带有多个关系的表达式的检索 例11 查询成绩为90分以上的学生名字与课程名字。 RANGE SC SCX   例11 查询成绩为90分以上的学生名字与课程名字。 RANGE SC SCX GET W(Student.Sname,Course.Cname): SCX (SCX.Grade≥90∧ SCX.Sno=Student.Sno∧ Course.Cno=SCX.Cno)     注:虽然查询时可能会涉及多个关系,即公式中可能涉及多个关系,但查询结果表达式中只有一个关系。实际上,表达式中是可以有多个关系的。 2018年9月20日星期四

(8)用全称量词的检索 例12 查询不选1号课程的学生名字。 RANGE SC SCX GET W (Student.Sname): 例12 查询不选1号课程的学生名字。 RANGE SC SCX GET W (Student.Sname): (SCX.Sno≠Student.Sno∨SCX.Cno≠ '1') 或用存在量词表示: GET W (Student.Sname): SCX (SCX.Sno=Student.Sno∧SCX.Cno='1') ∀ SCX 2018年9月20日星期四

(9)用两种量词的检索 例13 查询选修了全部课程的学生姓名。 RANGE Course CX SC SCX 例13 查询选修了全部课程的学生姓名。 RANGE Course CX SC SCX GET W (Student.Sname): ∀ CX  SCX (SCX.Sno=Student.Sno∧ SCX.Cno=CX.Cno) 2018年9月20日星期四

(10)用蕴函(Implication)的检索    例14 查询最少选修了95002学生所选课程的学生学号。   分析:本题的求解思路是:对Course中的所有课程,依次检查每一门课程,看95002是否选修了该课程。如果选修了,则再看某一个学生是否了也选修了该门课。如果对于95002所选的每门课程该学生都选修了,则该学生为满足要求的学生。把所有这样的学生全部都找出来即完成了本题。 2018年9月20日星期四

(10)用蕴函(Implication)的检索(续)   RANGE Couse CX SC SCX SC SCY GET W (Student.Sno): ∀ CX(SCX (SCX.Sno='95002'∧SCX.Cno=CX.Cno) SCY(SCY.Sno=Student.Sno∧ SCY.Cno= CX.Cno)) 注意:这里SC设了两个元组变量 2018年9月20日星期四

(11)集函数 常用集函数(Aggregation function)或 内部函数(Build-in function) 函 数 名 功 能 功 能 COUNT 对元组计数 TOTAL 求 总 和 MAX 求最大值 MIN 求最小值 AVG 求平均值 2018年9月20日星期四

集函数(续) 例15 查询学生所在系的数目。 例16 查询信息系学生的平均年龄 GET W ( COUNT(Student.Sdept) )  例15  查询学生所在系的数目。 GET W ( COUNT(Student.Sdept) ) 注:COUNT函数在计数时会自动排除重复值。    例16  查询信息系学生的平均年龄      GET W (AVG(Student.Sage): Student.Sdept = 'IS ' ) 2018年9月20日星期四

二、更新操作 (1) 修改操作 (2) 插入操作 (3) 删除操作 2018年9月20日星期四

(1)修改操作步骤 ① 用HOLD语句将要修改的元组从数据库中读到工作空间中: HOLD 工作空间名(表达式1)[:操作条件 ] HOLD语句是带上并发控制的GET语句。 ② 用宿主语言修改工作空间中元组的属性。 ③ 用UPDATE语句将修改后的元组送回数据库中: UPDATE 工作空间名 2018年9月20日星期四

(1)修改操作步骤(续)    需要注意的是,单纯检索数据使用GET语句即可,但为了修改数据而读元组时必须使用HOLD语句, HOLD语句是带上并发控制的语句。 2018年9月20日星期四

修改操作(续) 例17 把95007学生从计算机科学系转到信息系。 HOLD W (Student.Sno, Student.Sdetp): MOVE 'IS' TO W.Sdept (用宿主语言进行修改) UPDATE W (把修改后的元组送回Student关系) 2018年9月20日星期四

例17(续) 在该例中,用HOLD语句来读95007的数据,而不是用GET语句;   如果修改操作涉及到两个关系的话,就要执行两次HOLD-MOVE-UPDATE操作序列;   在ALPHA语言中,修改关系主码的操作是不允许的,例如,不能用UPDATE语句将该学号95001改为95002。如果需要修改主码值,只能先用删除操作删除该元组,然后用再把具有新主码值的元组插入到关系中。 2018年9月20日星期四

(2)插入操作 插入操作步骤: PUT语句只对一个关系操作(即表达式必须为单个关系名)。 ① 用宿主语言在工作空间中建立新元组。      PUT语句只对一个关系操作(即表达式必须为单个关系名)。 2018年9月20日星期四

插入操作(续) 例18 学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入该课程元组。  例18  学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入该课程元组。    MOVE '8' TO W.Cno MOVE '计算机组织与结构' TO W.Cname MOVE '6' TO W.Cpno MOVE '2' TO W.Ccredit PUT W (Course) 2018年9月20日星期四

(3)删除操作 ① 用HOLD语句把要删除的元组从数据库中读到工作空间中; ② 用DELETE语句删除该元组: DELETE 工作空间名 2018年9月20日星期四

删除操作(续) 例19 95110学生因故退学,删除该学生元组。 HOLD W (Student): Student.Sno='95110'  例19  95110学生因故退学,删除该学生元组。 HOLD W (Student): Student.Sno='95110' DELETE W  2018年9月20日星期四

删除操作(续) 例20 将学号95001改为95102。 HOLD W (Student): Student.Sno='95001'  例20  将学号95001改为95102。 HOLD W (Student): Student.Sno='95001' DELETE W MOVE '95102' TO W.Sno MOVE '李勇' TO W.Sname MOVE '男' TO W.Ssex MOVE '20' TO W.Sage MOVE 'CS' TO W.Sdept PUT W (Student)  返回P26 2018年9月20日星期四

删除操作(续) 例21 删除全部学生。 HOLD W (SC) DELETE W  例21  删除全部学生。 HOLD W (SC) DELETE W     在删除操作中保持参照完整性由于SC关系与Student关系之间的具有参照关系,为保证参照完整性,删除Student中元组时相应地要删除SC中的元组(手工删除或由DBMS自动执行): HOLD W (Student) DELETE W 2018年9月20日星期四

2.5.2 元组关系演算语言   元组关系演算语言是一种抽象的关系演算语言(上一节讨论的元组关系演算语言ALPHA是一种具体的元组关系演算语言)。    为了讨论方便,先允许关系(的基数)是无限的,然后再对这种情况下定义的演算作适当的修改,从而保证演算中的每一个公式表示的是有限关系。 2018年9月20日星期四

(一)原子公式    在元组关系演算系统中,称      { t | φ(t) }   为元组演算表达式。其中 t 是元组变量, φ(t)为元组关系演算公式,简称公式。它由原子公式和运算符组成。    原子公式有三类:    1.  R (t)      R是关系名, t是元组变量。 R (t) 表示t是R中的元组。于是,关系R可表示为:    { t | R (t)} 2018年9月20日星期四

该公式表示“t的第i个分量与常量c满足比较关系θ”。 例如,t [ 4] =3 表示:元组t的第4个分量等于3。  2.  t [ i ] θu [ j ]    t 和u是元组变量, θ是算术比较运算符。  t [ i ] θu [ j ]表示断言“元组t的第i个分量与元组u的第j个分量满足比较关系θ”。   例如,t [ 2 ] <u [3 ]表示:元组t的第2个分量小于元组u的第3个分量。  3.  t [ i ] θc 或 c θ t [ i ]   该公式表示“t的第i个分量与常量c满足比较关系θ”。   例如,t [ 4] =3 表示:元组t的第4个分量等于3。 2018年9月20日星期四

(二)公式的递归定义     在关系演算中,定义了“自由元组变量”和“约束元组变量” 的概念。这些概念与在谓词演算中的概念完全一样。如果公式中的一个元组变量前有“全称量词”或“存在量词”,我们称该变量为约束元组变量,否则称该变量为自由元组变量。    公式可以递归定义如下:  (1)每个原子公式是公式。  (2)如果 φ1 和 φ2 是公式,则φ1 ∧ φ2 ,φ1 ∨φ2 , ┓φ1 也是公式。分别表示为: 2018年9月20日星期四

如果φ1 和φ2同时为真,则 φ1 ∧ φ2 才为真,否则为假;    如果φ1 和φ2同时为真,则 φ1 ∧ φ2 才为真,否则为假;    如果φ1 和φ2 中有一个为真或同时为真,则 φ1 ∨φ2 为真,仅当φ1 和φ2同时为假时, φ1 ∨φ2 才为假;    如果 φ1 为真,则┓φ1为假。  (3)若φ是公式,则 ∃t(φ)也是公式。其中符号∃是存在量词符号, ∃ t(φ) 表示:若有一个 t 使φ 为真,则∃ t(φ)为真,否则 ∃ t(φ) 为假。 2018年9月20日星期四

(5)在元组演算公式中,各种运算符的优先次序为: ①算术比较运算符最高; ②量词次之,且存在量词∃的优先级高于全称量词∀(所有)的优先级;   (4)若φ是公式,则∀t(φ)也是公式。其中符号∀是全称量词符号, ∀t(φ) 表示:如果对所有 t,都使φ为真,则∀t(φ) 为真,否则∀t(φ) 为假。    (5)在元组演算公式中,各种运算符的优先次序为:  ①算术比较运算符最高;  ②量词次之,且存在量词∃的优先级高于全称量词∀(所有)的优先级; 2018年9月20日星期四

③逻辑运算符最低,且逻辑非┓的优先级高于逻辑与∧的优先级,逻辑与∧的优先级高于逻辑或∨的优先级;    ③逻辑运算符最低,且逻辑非┓的优先级高于逻辑与∧的优先级,逻辑与∧的优先级高于逻辑或∨的优先级;    ④加括号时,括号中运算符优先;同一括号内的运算符的优先级遵循上述各项的规定。  (6)有限次地使用上述五条规则得到的公式是元组关系演算公式,其它公式不是元组关系演算公式。    一个元组演算表达式{ t | φ(t)}表示了使φ(t)为真的元组集合。 2018年9月20日星期四

(三)元组演算表达式的五种基本运算 关系代数的运算均可以用关系演算表达式来表示(反过来也是这样)。 元组演算表达式的五种基本运算: (三)元组演算表达式的五种基本运算     关系代数的运算均可以用关系演算表达式来表示(反过来也是这样)。   元组演算表达式的五种基本运算:  (1)并: R ∪ S = { t | R(t) ∨ S(t) }   (2)差: R - S = {t | R(t) ∧ ┓S(t)}  (3)笛卡儿积:  R × S = {t (m+n) | ( ∃u(n)) (∃ v(m)) (R(u) ∧S(v) ∧t[1]=u[1] ∧… ∧ t[n]=u[n] ∧ t[n+1]=v[1] ∧ … ∧ t[n+m]=u[m])} 注:t (m+n)表示t有目数(n+m) 2018年9月20日星期四

π i1,i2, …,ik (R) = {t (k) | ( ∃u) (R(u) ∧t[1]=u[i1] ∧… ∧ t[k]=u[ik])}  (4)投影: π i1,i2, …,ik (R) = {t (k) | ( ∃u) (R(u) ∧t[1]=u[i1] ∧… ∧ t[k]=u[ik])} (5)选择:σF (R) = { t | R(t) ∧F `}   F `是公式F用 t[i] 代替运算对象 i得到的等价公式。  下面用关系演算来表达查询的例子。  例1. 查询信息系(IS系)全体学生。 S IS ={ t | Student(t) ∧t[5]= `IS` } 2018年9月20日星期四

S 20 ={ t | Student(t) ∧t[4]< 20 } 注: 例1、例2中t的目数与原关系相同;  例2. 查询年龄小于20岁的学生。 S 20 ={ t | Student(t) ∧t[4]< 20 }  注: 例1、例2中t的目数与原关系相同;  例3. 查询学生的姓名和所在系。 S 1 ={ t(2) | ( ∃u) (Student(u) ∧t[1]=u[2] ∧t[2]= u[5] )} 注: 例3中t为查询后的元组 ;目数为2;u∈Student. 2018年9月20日星期四

(四)元组表达式的安全问题   上面定义的关系演算允许出现无限关系。例如, {t | ┓R(t) }表示所有不属于R的元组(元组的目数等于R的目数)。要求出这些可能的元组是做不到的,所以,必须排除这类无意义的表达式。我们把不产生无限关系的表达式称为安全表达式,所采取的措施称为安全限制。安全限制通常是定义一个有限的符号集dom(φ), dom(φ)一定包括出现在 φ以及中间结果和最后结果的关系中的所有符号  (实际上是各列中值的汇集) ; dom(φ)不必是最小集。 2018年9月20日星期四

当满足下列条件时,元组演算表达式{t| φ(t)是安全的: (1) 如果t使 φ(t)为真,则 t 的每个分量是 dom(φ) 中的元素。   (2) 对于φ中的每一个形如(∃ u)(W(u)) 的子表达式,若u使W(u)为真,则 u的每个分量是dom(φ) 中的元素。   (3) 对于φ中的每一个形如(∀ u)(W(u)) 的子表达 式,若u使W(u)为假,则 u的每个分量必属于 dom(φ) 。或者说,若u某个分量不属于 dom(φ) ,则 W(u) 为真。 2018年9月20日星期四

若不进行安全限制,则可能是一个无限关系。所以定义  例4 设有关系R如下图(a)所示, S= {t | ┓R(t) },      (a)    若不进行安全限制,则可能是一个无限关系。所以定义 A B C a1 b1 c1 a2 b2 c2 2018年9月20日星期四

则S是dom(φ)中各域值中元素的笛卡儿积与R的差积。    dom(φ) = πA(R) ∪ πB(R) ∪ πC(R) ={{a1,a2},{b1,b2},{c1,c2}}    则S是dom(φ)中各域值中元素的笛卡儿积与R的差积。    注意:在做笛卡儿积时,各个域中的元素不能颠倒。图如下页(b)所示: 2018年9月20日星期四

图 (b) A B C a1 b1 c2 a1 b2 c1 a1 b2 c2 a2 b1 c1 a2 b1 c2 a2 b2 c1 2018年9月20日星期四

2.5.3 域关系演算语言QBE (域关系演算以元组变量的分量即域变量作为谓词变元的基本对象) ⊙ QBE(Query By Example):通过例子进行查询的简称; ⊙ 一种典型的域关系演算语言 (域关系演算以元组变量的分量即域变量作为谓词变元的基本对象) 1975年,由M.M.Zloof提出 1978年,在IBM370上得以实现 QBE也指此关系数据库管理系统 2018年9月20日星期四

QBE的特点 QBE的最突出的特点是它的操作方式: (它是一种高度非过程化的)基于屏幕表格的查询语言; 查询要求:(用户通过终端屏幕编辑程序)以填写表格的方式构造查询方式; 查询结果:以表格形式显示,用示例元素(即域变量)来表示查询结果可能的情况。 2018年9月20日星期四

QBE操作框架   关系名 属性名 操作命令 元组属性值或查询条件或操作命令 2018年9月20日星期四

一、检索操作 (3)用户在最左边一栏输入要查询的关系名,例如 Student; (1)用户提出要求; (2)屏幕显示空白表格;     (3)用户在最左边一栏输入要查询的关系名,例如 Student; Student 2018年9月20日星期四

检索操作(续) (4)系统显示该关系的属性名 (5)用户在上面构造查询要求 Student Sno Sname Ssex Sage Sdept   Student Sno Sname Ssex Sage Sdept   P. T IS 2018年9月20日星期四

检索操作(续) (6)屏幕显示查询结果 根据用户的查询要求,求出了信息系的学生姓名。 Student Sno Sname Ssex Sage    根据用户的查询要求,求出了信息系的学生姓名。 Student Sno Sname Ssex Sage Sdept   李勇 张立 IS 2018年9月20日星期四

构造查询的几个要素 T :示例元素即域变量,一定要加下划线;    示例元素是这个域中可能的一个值,它不必是查询结果中的元素。例如,要求信息系的学生,只要给出任意一个学生名即可,而不必真是信息系的某个学生名。 P. : 打印操作符,表示打印(实际上是显示),即指定查询结果所含属性列。  查询条件 :可使用比较运算符>,≥,<,≤,=和≠;不用加下划线;其中=可以省略。例如, 2018年9月20日星期四

这里的查询条件是Sdept=`IS`,其中“=”被省略。 Student Sno Sname Ssex Sage Sdept 对于例4,可构造如下查询要求: 这里的查询条件是Sdept=`IS`,其中“=”被省略。 Student Sno Sname Ssex Sage Sdept   P. 李勇 IS 2018年9月20日星期四

1. 简单查询 例1 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept P.95001 例1 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept   P.95001 P. 李勇 P.男 P.20 P.CS 2018年9月20日星期四

简单查询(续) 显示全部数据也可以简单地把P.操作符作用在关系名上,因此,本查询也可以简单地表示为: P. Student Sno Sname Ssex Sage Sdept   P.   2018年9月20日星期四

条件查询(续) [例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001  [例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept   P.95001 >19 2018年9月20日星期四

条件查询(与条件) [例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上: Student Sno [例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上: Student Sno Sname Ssex Sage Sdept   P.95001 >19 CS 2018年9月20日星期四

条件查询(续) 方法(2):把两个条件写在不同行上,但使 用相同的示例元素值: Student Sno Sname Ssex Sage Sdept   P.95001 >19 CS 2018年9月20日星期四

条件查询(续) 例5 查询计算机科学系或者年龄大于19岁的学生的学号。    例5 查询计算机科学系或者年龄大于19岁的学生的学号。    本查询的条件是Sdept=‘CS’和Sage>19两个条件的“或”。在QBE中,把两个条件写在不同行上,并且使用不同的示例元素值,即表示条件的“或”。 Student Sno Sname Ssex Sage Sdept   P.95001 P.95002 >19 CS 2018年9月20日星期四

条件查询(续) 例6 查询既选修了1号课程又选修了2号课程的学生的学号。   例6 查询既选修了1号课程又选修了2号课程的学生的学号。    本查询条件是在一个属性中的 “与”关系,它只能用“与”条件的第(2)种方法表示,即写成两行,但示例元素相同。 SC Sno Cno Grade   P.95001 1 2 2018年9月20日星期四

多表连接 例7 查询选修1号课程的学生姓名。 注意:示例元素Sno是连接属性,其值在两个表中要相同。 Cno  例7 查询选修1号课程的学生姓名。    本查询涉及两个关系:SC和Student。在QBE中,实现这种查询的方法是通过相同的连接属性值,把多个关系连接起来。 注意:示例元素Sno是连接属性,其值在两个表中要相同。 SC Sno Cno Grade   95001 1 Student Sname Ssex Sage Sdept P.李勇 2018年9月20日星期四

条件查询(非条件) 例8 查询未选修1号课程的学生姓名。 这里的查询条件中用到逻辑非。在QBE中表示逻辑非的方法是将逻辑非写在关系名的下面。  例8 查询未选修1号课程的学生姓名。   这里的查询条件中用到逻辑非。在QBE中表示逻辑非的方法是将逻辑非写在关系名的下面。  该查询即为显示学号为95001的学生名字,而该学生选修1号课程的情况为假。 SC Sno Cno Grade   95001 1  Student Sname Ssex Sage Sdept P.李勇 2018年9月20日星期四

条件查询(续) 例9 查询有两个人以上选修的课程号。 例9  查询有两个人以上选修的课程号。    本查询是在一个表内连接。查询这样的课程1,它不仅被95001选修,而且也被另一个学生(95001)选修了。 SC Sno Cno Grade   95001 .95001 P.1 1 2018年9月20日星期四

3. 集函数 QBE中的常用集函数: 函 数 名 功 能 CNT 对元组计数 SUM 求 总 和 AVG 求平均值 MAX 求最大值 MIN 功 能 CNT 对元组计数 SUM 求 总 和 AVG 求平均值 MAX 求最大值 MIN 求最小值 2018年9月20日星期四

集函数(续) 例10 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept P.AVG.ALL.  例10 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept   P.AVG.ALL. IS 2018年9月20日星期四

4.对查询结果排序(续) 例11 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。  例11 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。 对查询结果按某个属性值的升序排序,只需在相应的列中填入“AO.”,按降序排序则填入“DO.” 。如果按多列排序,用“AO(i).”或“DO (i).”表示 ,其中i为排序的优先级, i值越小,优先级越高。    查询结果: 2018年9月20日星期四

Student Sno Sname Ssex Sage Sdept   P.李勇 男 DO(2). AO(1). 2018年9月20日星期四

二、修改操作  1.修改操作:    修改操作符为“U.”。在QBE中,关系的主码是不能修改的,如果需要修改某个元组的主码,只能先删除该元组,然后再插入新的主码的元组。  例12  把95001学生的年龄改为18岁。方法(1) :将操作符“U.”放在值上。 Student Sno Sname Ssex Sage Sdept 95001   U. 18 2018年9月20日星期四

修改操作(续) 方法(2): 将操作符“U.”放在关系上 Student Sno Sname Ssex Sage Sdept U. 95001   18 2018年9月20日星期四

修改操作(续) 例13 把95001学生的年龄增加1岁 (这个修改操作涉及表达式,所以只能将操作符“U.”放在关系上) 。 例14 将计算机系所有学生的年龄增加1岁。 Student Sno Sname Ssex Sage Sdept   U. 95001 17 17+1 Student Sno Sname Ssex Sage Sdept   U. 95008 18 18+1  CS 2018年9月20日星期四

2.插入操作 I. 插入操作符为“I.”。新插入的元组必须具有码值,其它属性为空。    例15 把信息系女生95701,姓名张三,年龄17岁存入数据库中。 Student Sno Sname Ssex Sage Sdept I. 95701 张三 女 17 IS 2018年9月20日星期四

3. 删除操作 删除操作:删除操作符为“D.”。 D. Sage 例16 删除学生95089。  例16  删除学生95089。     由于SC关系与Student关系之间具有参照关系,为保证参照完整性,删除95089学生后,还要删除95089学生选修的全部课程。 Student Sno Sname Ssex Sage Sdept D. 95089 SC Sno Cno Grade D. 95089   2018年9月20日星期四

2.6小结 本章系统讨论了关系数据库的重要概念,包括关系模型的数据结构、关系的完整性以及关系操作。    本章系统讨论了关系数据库的重要概念,包括关系模型的数据结构、关系的完整性以及关系操作。     关系数据库系统是重点。这是因为关系数据库系统在目前是使用最广泛的数据库系统。20世纪70年代以后开发的数据库管理系统产品几乎都是基于关系的;数据库领域近30年来的研究工作也主要是关系的。在数据库发展的历史上,最重要的成就即为关系模型。 2018年9月20日星期四

  2.6小结(续)    关系数据库系统与非关系数据库系统的区别是:关系系统只有“表”这一种数据结构;而非关系数据库系统还有其它数据结构,对这些数据结构有其它的操作。    关系理论的确立标志着关系数据库系统的基础研究已经接近顶峰。关系数据库系统已经占据了数据库的市场。 2018年9月20日星期四