1 / 58

第二章 关系数据库系统 关系数据库系统是基于关系模型的数据库系统,由 E.F.Code 于 1970 年提出。 1976 年后出现实验性及商

B. 第二章 关系数据库系统 关系数据库系统是基于关系模型的数据库系统,由 E.F.Code 于 1970 年提出。 1976 年后出现实验性及商 品化系统 System-R 、 Ingres 、 QBE 等。 由于具有数 据结构简单、用户使用方便、功能强、数据独立性 高和理论基础深等优点,七十年代末以后问世的产 品绝大多数是关系模型,并逐渐替代网络、层次模 型数据库系统而成为主流数据库系统。 目前关系数 据库系统已经成熟,其产品发展表现在对多机种多 操作系统的适应、查询语言标准化、提供多种开发 工具、具有分布式功能、有较好的开放性以及提供

odette
Télécharger la présentation

第二章 关系数据库系统 关系数据库系统是基于关系模型的数据库系统,由 E.F.Code 于 1970 年提出。 1976 年后出现实验性及商

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. B 第二章 关系数据库系统 关系数据库系统是基于关系模型的数据库系统,由 E.F.Code于1970年提出。1976年后出现实验性及商 品化系统System-R、Ingres、QBE等。 由于具有数 据结构简单、用户使用方便、功能强、数据独立性 高和理论基础深等优点,七十年代末以后问世的产 品绝大多数是关系模型,并逐渐替代网络、层次模 型数据库系统而成为主流数据库系统。目前关系数 据库系统已经成熟,其产品发展表现在对多机种多 操作系统的适应、查询语言标准化、提供多种开发 工具、具有分布式功能、有较好的开放性以及提供 多媒体管理、知识管理和工程管理的功能。 第一节 关系数据模型 第二节 关系运算 第三节 关系运算的安全性 第四节 关系代数、元组演算、域演算的等价性 第五节 关系数据库查询语言

  2. B1 第一节 关系数据模型 数据模型一般包括三个部分:数据结构、数据操作和数 据完整性约束。数据模型中的数据结构主要描述数据类 型、性质以及数据间的联系。数据结构是数据模型的基 础。数据操作与数据约束均建立在数据结构之上。不同 的数据结构,对应着不同的数据操作和数据约束。因此, 数据模型一般以数据结构分类。数据模型中的数据操作 主要描述在相应数据结构上的操作类型与操作方式。数 据模型中的数据完整性约束主要描述数据结构内数据间 的语法、语义联系,它们间的制约和依存关系,以及数 据动态变化的规则以保证数据的正确、有效与相容。 本节介绍的关系数据模型是关系数据库系统的基础。 它由以下三个基本部分组成: 1.关系数据结构 2.关系中的完整性约束规则 3.关系运算

  3. B11 1.关系数据结构 关系的数学定义: 域是一个集合; n个域Di (i=1, ,n)的笛卡儿乘积定义为 D1Dn ={(d1 ,  , dn )|d1D1, ,dnDn }, (d1 ,  , dn )称为关系元组,各di称为元组的分量; 称D1Dn的任一子集为定义在域D1 ,  , 域Dn的关系。 在作为数据模型的数据结构时,关系概念作如下限定和扩充: (1)关系必须是有限集合; (2)通过对每个域附加属性名,取消关系元组的有序性, 一个元组不因其属性顺序的改变而改变。 对关系的域赋予名字,称为属性,而域称为属性的值域; 设属性Ai的值域是Di,具有属性A1 ,A2 ,…,An的关系是一个元 组集合, 每个元组是一个映射集合{{A1}D1,…,{An}Dn,} 关系模式是一个系统 R(U, D, DOM, I, F),简记为R(U) R:关系名 U:属性集合 D:属性的值域 DOM:U到D的映射 I:完整性约束集合 F:属性间的函数依赖关系 (完整性约束与属性间的函数依赖这两个概念在后边叙述) 接下页

  4. B111 接下页 关系可用一个二维表来直观地表示,表的每一列表示一个属性, 每一行表示一个元组。列的名字就是属性名。这种二维表有下 述基本约束: 同一列的分量具有相同的数据类型,来自同一个域; 不同的列可以来自相同的域,但具有不同的属性名; 没有重复的行; 行的次序可以任意交换; 列的次序可以任意交换; 属性值必须是不可分的数据项。 关系和关系模式是密切相关而又有所不同的概念。 关系模式描述了关系的数据结构和语义约束,不是集合。而 关系(关系实例) 是关系模式在某时刻的‘当前值’,是数据集合。 关系模式是稳定的,而关系随着数据库的更新而变化。

  5. B112 接下页 例:课程安排数据库的关系模式和关系实例 关系模式(这里仅列出属性集合): teacher(教师编号,姓名,所属系) student(班级,人数,班主任,联系电话) course(课程名称,教师编号,班级,时间,地点) course 关系实例: 课程名称 教师编号 班级 时间 地点 量子力学 4409 物01 4-12 1301 数据结构 4410 信00 4-34 1301 微波原理 4413 电99 4-56 1301 teacher student 教师编号 姓名 所属系 4409 周东 物理系 4410 林西 信息系 4413 赵南 电子系 班级 人数 班主任 联系电话 物01 50 陈春 84130291 信00 55 苏夏 84133310 电99 60 徐秋 84130780

  6. B113 接下页 一个关系数据库教学模型 课本经常引用的关系数据库COMPANY(六个表) employee(name,ssn,bdate,address,sex,salary, superssn, dno) 雇员 姓名 证号 生日 地址 性别 工资 负责人证号 部门 department(dname, dnumber,mgrssn, mgrstartdate) 部门 部门名 部门号 负责人证号 负责人上任日期 depart_location(dnumber, dlocation) 部门地址 部门号 部门所在地 project( pname, pnumber, dnum, plocaion) 工程项目 项目名 项目号 部门号 项目所在地 works_on( essn, pno, hours) 工程人员 雇员证号 项目号 小时数 dependent( essn, dependent_name, sex, bdate, relationship) 家属 雇员证号 家属姓名 性别 生日 与雇员的关系

  7. B114 候选键(或称为关键字,简称为键key)定义: 若关系模式R的属性子集K满足下列条件,则称为候选键: (1)R的任何实例的任两元组在K的值都不相同(唯一性); (2)K的任何真子集都不满足条件(1)(最小性) 候选键的属性称为键属性,关系模式的其它属性称为非键属性。 在所有的键中,必须指定一个作为用户使用的键,称为主键。 外部键定义:若关系模式R的属性子集X是另一关系模式S的候选 键,则称X是R关于S的外部键。 利用外部键可以实现关系模式之间的联系。 [例] student(班级,人数,班主任,联系电话),班级是候选键。 course(课程名称,教师编号,班级,时间,地点), 课程名称是候选键。 班级是course关于student的外部键。 利用这个外部键可以实现两个关系之间的联系。

  8. B12 关系模型的完整性约束 实体完整性约束:主键不能接受空值。空值是指未知或不存在。 该约束可以这样理解:一个关系对应现实世界的一个实体 集。现实世界的实体是可以区分的,有某种唯一性标识。 关系模型以主键作为唯一标识。若主键接收空值,说明存 在某个不可识别的实体。这与‘有某种唯一标识’相矛盾。 关联完整性约束:设X是关系模式R关于关系模式S的外部键。 若R的关系实例的某个元组在X取非空的值k,则S实例必 须存在某个元组在X取值k。 例:dno是关系模式employee关于department的外部键。 employee实例每个元组在dno若取空值,表明该雇员未安排 到某个部门;若取非空值k,则表明他被安排到编号为k的 部门,因而要求department实例必须有某元组在X取值k. 上述的完整性约束是由关系模型确定的。我们将在第四章学习 由用户根据应用领域的要求而定义的完整性约束。

  9. B2 第二节 关系运算 关系运算的特点是集合操作方式,即操作的对象和结果都是 集合。故这种操作方式称为一次一集合方式。相应地,非关 系数据模型的数据操作方式则为一次一记录方式。 关系运算有两种定义方式: 关系代数:这是用对关系的运算来表达查询要求的方式。 对有限个关系作有限运算所得的结果 关系演算:这是用谓词来表达查询要求的方式。用满足条件 的元组的集合表示运算结果。条件称为演算公式。 按谓词变元的基本对象分为两种形式: 元组关系演算 域关系演算 三种关系运算的比较例子

  10. 一、 关系代数 关系代数包括 五个基本操作: 1.并(二元运算):即相同属性结构的关系R和S的元组并运算; 2.差(二元运算):即相同属性结构的关系R和S的元组差运算; 3.笛卡儿乘积(二元运算):定义关系R、S的笛卡儿乘积为 RS={(r,s)|rRsS}.即穷遍R和S元组,接驳为输出元组 4.投影(一元运算): 定义关系R对其属性i,j,k的投映为 i,j,k(R)={(ri , rj , rk)|rR},即仅取R指定的属性 5.选择(一元运算):定义关系R关于条件F:ric的选择为 F(R)={r|rR ric},即取遍R满足条件F的元组 {=,,>,<,,}.R的选择操作定义为: 附加操作: 6.交(二元运算):同一关系模式两个实例(元组集合)的交运算; 7.连接(二元运算):设A、B分别是关系R、S的属性且有相同的域, 算术比较运算符{=,,>,<,,}, R和S关于条件F:AB的连接操作定义为 RFS=F(RS)={rs|rRsSr[A]s[B]} 8.商(二元运算): B21 查询的 关系代数 操作例子

  11. B21A 并运算(二元运算): 设R和S的对应属性有相同的域, 定义RS={t|tRtS}为R与S之并 动画 并RS 关系R ABC a b c d a f c b d b g a 关系S ABC a b c d a f c b d ABC b g a d a f [例] 教务处印发选课表给各系填写该系学生 选课情况。表格收回后需要综合为一个 总表。这可以理解为关系的并运算。

  12. B21B 差运算(二元运算): 设R和S的对应属性有相同的域, 定义R-S={t|tRtS}为R与S之差. 动画 关系R 关系S 交R-S ABC a b c d a f c b d ABC a b c c b d ABC b g a d a f [例] 根据学生名册和学生运动员名册产生学生非 运动员名册,这可以理解为关系的差运算。

  13. B21C 笛卡儿乘积运算(二元运算): 定义关系R、S的笛卡儿乘积为 RS={(r,s)|rRsS}. 动画 笛卡儿乘积RT 关系R ABCDEF a b c p q r a b c x y z d a f p q r d a f x y z c b d p q r c b d x y z 关系T ABC a b c d a f c b d DEF p q r x y z [例] 两队散打运动队均由三名队员组成。现作循环 比赛,赛事表可看成是两队名单的笛卡儿乘积。

  14. B21D 投影(一元运算): 定义关系R对其属性i,j,k的投映为 i,j,k(R)={(ri , rj , rk)|rR} 动画 AC (R) 关系R AB (R) AC a c d f ABC a b c d e f a a c AB a b d e a a [例] 教务处印发的教学安排表描述了所有课程上 课的时间地点。现在仅需列出各门课程及上 课时间。这可以理解为关系的选择运算。

  15. B21E 选择(一元运算): 定义关系R关于条件F:ric的选择为 F(R)={r|rR ric}, {=,,>,<,,}. 动画 关系R B=b(R) ABC a b c d a f c b d ABC a b c c b d [例] 教务处印发的教学安排表详细地描述了所有课程 上课的时间地点。现在需要列出在某一教学时间 上课的全部课程。这可以理解为关系的选择运算。

  16. B21F 交(二元运算): 设R和S是同一关系模式的两个实例, 定义RS={t|tRtS}=R-(R-S)为R与S之交。 动画 关系R 关系S RS ABC a b c d a f c b d ABC d a f ABC b g a d a f [例] 根据某系学生名册和全校学生运动员名册产生该 系学生运动员表格,这可以理解为关系的交运算。

  17. 连接(二元运算):设A、B分别是关系R、S的属性且有相同的域,连接(二元运算):设A、B分别是关系R、S的属性且有相同的域, 算术比较运算符{=,,>,<,,},R和S关于条件F:AB 的连接操作定义为RFS=F(RS)={rs|rRsSr[A]s[B]} [自然连接]设B是关系R、S的共同属性。称满足R.B=S.B并限制B在 结果关系中只出现一次的连接操作为自然连接,记为RS [复合连接]类似于自然连接,但运算结果不含连接属性。 [半连接]RABS:在连接结果中仅保留R的属性。 B21G S R ABC 1 2 3 4 5 6 7 8 9 ABCDE 1 2 3 3 1 1 2 3 6 2 4 5 6 6 2 动画 连接 DE 3 1 6 2 RB<DS R S ABCED a b c c d a b c c e d b c c d d b c c e c a d d b ABC a b c d b c b d f c a d 自然连接 BED b c d b c e a d b R S ABC a b c d b c b c f c a d ABC a b c d b c c a d BED b c d b c e a d b 半连接 RR.B=S.BS 接下页

  18. B21G1 [例]设关系R ,S的实例分别为 S 产品号 价格 001 111 002 222 003 333 004 444 R 产品号 销量 001 11 002 22 则R和S的自然连接为RS= 产品号 价格 销量 001 111 11 002 222 22 产品号 价格 001 111 002 222 R和S的半连接为RS=

  19. 商操作(二元运算): 设关系R和S的属性集合分别是Z和X,并设ZX,Y=Z-X, 定义R对S的商操作为D=RS={t|tY(R)且sS,tsR}. 即在Y(R)中取最大元组子集D,使DSR. B21H 不符合商操作定义 去掉后得到商关系 AB a b b c e d Y(R) 关系S 关系R CD c d e f ABCD a b c d a b e f b c e f e d c d e d e f a b d e T=RS AB a b e d 商操作 商关系 RTS

  20. B21I 例 使用关系代数在数据库COMPANY查询: 研究部所有工作人员的名字和地址。 查询的关系代数表达式: name,addressdname=‘研究部’ (departmentdnumber=dno employee) Department 部门号 部门名 01 开发部 02 财务部 03 经理部 04 研究部 • R1=departmentEmployee • 证号 姓名 部门号 地址 部门名 • 128 陈大 01 康乐 研究部 • 902 赵二 02 唐湾 财务部 • 676 张三 03 东山 研究部 • 李四 02 康乐 经理部 • 686 王五 01 东山 开发部 • Employee • 证号 姓名 部门号 地址 • 128 陈大 04 康乐 • 902 赵二 02 唐湾 • 673 张三 04 东山 • 李四 03 康乐 • 686 王五 01 东山 R3=(R2) 姓名 地址 陈大 康乐 张三 东山 R2=( R1) 证号 姓名 部门号 地址 部门名 128 陈大 01 康乐 研究部 676 张三 03 东山 研究部

  21. B22 (二)元组关系演算 用元组集表示关系运算的结果:{ t |(t) }. { t |(t) }称为元组演算表达式,其中t是元组, (t)是元组t必须满足的逻辑表达式,称为元组关系演算公式, 布尔运算的元组关系演算公式可有限次使用下边五条规则得到: (1)三种基本演算公式 R(t)=真,当且仅当元组t属关系R; t[i]u[j]=真,当且仅当元组t的分量i与元组u的分量j满足算术比较; t[i]c=真,当且仅当元组t的分量i与值c满足算术比较. (2)用逻辑算符 连结演算公式. (3)用存在量词作用演算公式. t[]=真,当且仅当有元组t使算式为真. (4)用全称量词作用演算公式. t[]=真,当且仅当任元组t使算式为真. (5)元组演算公式中运算的优先序: 括号,  , , ,  ,  ,  接下页

  22. 例 在数据库COMPANY查询: 研究部所有工作人员的名字和地址. 要求使用元组关系演算表达式. 在关系employee找出所有元组e满足: 在关系department存在元组d满足 选择条件以及和e的连接条件. 所有这些e都仅取属性name,address.所得元组t的集合就是查询结果. B221 用元组关系演算表达式 {t|employee(e)(…)(...)(d(…))} t[name]=e[name] t[address]=e[address] department(d) (d[dname]=‘研究部’) (d[dnumber]=e[dno]) employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 department(dname, dnumber,mgrssn, mgrstartdate) 部门 部门名 部门号 负责人证号 负责人上任日期

  23. B23 (三)域关系演算 用元组集合表示关系运算的结果{t1..tk|(t1..tk)}. {t1..tk|(t1..tk)}称为域演算表达式,其中t1..tk是元组t的域变量. (t1..tk)是元组(t1..tk)必须满足的逻辑表达式,称为域关系演算公式, 布尔运算的域关系演算公式可有限次使用下边五条规则得到: (1)三种基本演算公式 R(t1..tk)=真,当且仅当以t1..tk为属性的元组在关系R中, tiuj=真, 当且仅当元组t的分量i与元组u的分量j满足算术比较关系 tic=真,当且仅当元组t的分量i与值c满足算术比较. (2)用逻辑运算符    连结公式. (3)用存在量词作用域关系演算公式: 若是域关系演算公式,则ti()也是域关系演算公式. (4)用全称量词作用域关系演算公式: 若是域关系演算公式,则ti()也是域关系演算公式. (5)元组演算公式中运算优先序:括号,,,,, , 接下页

  24. B231 例 在数据库COMPANY查询: 研究部所有工作人员的名字和地址. 要求使用域关系演算表达式. 在关系employee寻找这样的元组,其部门号z满足: 与department的连接条件(department预先经过选择操作) 这些元组仅取属性n,a,这就是查询的结果. employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 department(dname, dnumber,mgrssn, mgrstartdate) 部门 部门名 部门号 负责人证号 负责人上任日期 相当于关系代数的投映,选择,连接 名 证 生 地 部门号 用域关系演算表达式 { na | (z)(employee(nsbasxyz) ( (l) (m) (…) ) ) } department(l m n o) (l=‘研究部’)(m=z) 部门名 部门号

  25. B24 查询研究部所有工作人员的姓名地址的三种关系运算方式 用元组关系演算表达式 {t|EMPLOYEE(e)(.)(.)(d(.))} t[name]=e[name] t[address]=e[address] department(d) (d[dname]=‘研究部’) (d[dnumber]=e[dno]) 用关系代数表达式: NAME,ADDRESS(……) DNAME=‘研究部’DEPARTMENTDNUMBER=DNO EMPLOYEE 名 证 生 地 部门号 用域关系演算表达式 { na | (z)(employee(nsbasxyz) ( (l) (m) (…) ) ) } department(l m n o) (l=‘研究部’)(m=z) 部门名 部门号

  26. B3 第三节 关系运算的安全性 关系运算的安全性是指对有限关系运算时要求不导致无限关系和无 穷验证。关系代数具有这种性质,但关系演算却有一些反例。例如 若关系R的某属性具无限值域时, 则表示式{t| R(t)}就是一个具有无限个元组的关系。 若变量t的定义域是无限域时,则判断tF(t)为假或判断 tF(t) 为真,都发生无穷验证。 这正是我们所不希望发生的,因为这与计算机资源的有限性冲突。 为避免出现这种情况,必须对关系演算作出约束。 [定义1]设是一个元组关系演算公式,的符号集DOM()定义为 由如下两类符号构成的集合: (1) 中的常量; (2) 中出现的关系所有元组所有分量值。 在所有关系都有限的情况下,DOM()是有限集合。 [定义2]元组关系演算表达式={t|(t)}的安全性定义为 (1)使(t)为真的t,其分量必属于DOM(); (2)对中形如tF(t)的子式,使F(u)为真的u,其分量必属于DOM(); (3)对中形如tF(t)的子式,使F(u)为假的u,其分量必属于DOM(). 接下页

  27. DE F 1 d g 5 b f 6 c c 7 d e B31 ABC a 3 g b 5 h R S [例1]设关系R、S的实例为如右图示。 考虑元组关系演算表达式 ={t|t[1]=b  R(t)  S(t)}, 其符号集为 DOM={b}A (R) B (R) C (R) D (S) E (S) F (S) ={b,a,3,g,5,h,1,d,f,6,c,7,e} [例2]设元组关系演算表达式{t|1(t)}是安全的,而元组关系演算公式 2(t)不包含可能破坏安全性的形为tF(t)、tF(t)的子式, 求证任何形如={t|1(t)2(t)}的元组关系演算表达式是安全的. 证明: 若t 使(t) = 1(t) 2(t)为真,当然使1(t)为真.因{t|1(t)}是安全的, 故t的分量属于DOM(1(t))DOM(1(t)2(t))=DOM((t)), 故元组关系演算表达式满足安全性定义的条件(1). 因2(t)不含形为tF(t)、tF(t)的子式,故(t)所包含的形 为tF(t)、tF(t)的子式其实是属于1(t)的, 故满足安全性定义的条件(2)和(3)。

  28. B4 第四节 关系代数、元组演算、域演算的等价性 ‘两个关系运算表达式是等价的’,指的是:它们表达的关系相同。 本节证明关系代数、元组演算、域演算在下述意义下是等价的: (1)任意关系代数表达式E,都有等价的安全元组演算表达式; (2)任意安全元组演算表达式E,都有等价的安全域演算表达式 (3)任意安全域演算表达式E,都有等价的关系代数表达式 现仅证明(1). 对E的运算符数目m,运用数学归纳法。 当m=0,E是关系变量R或一个常关系(t1,, tk). 当E是关系变量R, E等价于元组演算式{t|R(t)},该表达式是安全的 ; 当E是一个常关系(t1,, tk),即k个元组的集,E等价于{t|t=t1,,tk} 此时(1)的结论为真。 设mN时, (1)的结论成立,往证m=N+1时(1)的结论也成立。 设E=E1E2 ,则E1和E2内的运算符数目N,结论(1)成立。 逐一考虑关系代数操作符的五种基本情况: , , , , . 这里仅考虑基本情况1,即E=E1E2, 设E1={t|1(t)}, E2={t|2(t)}, 令(t)=1(t)2(t),则E1E2={t|(t)},若t满足(t),由E1和E2的安 全性,t的分量在DOM(1(t))或在DOM(2(t))中,而(t)的形为 tF(t)、tF(t)的子式必在1(t)或2(t)内,故E1E2={t|(t)}是安全的

  29. B5 第五节 关系数据库查询语言 绝大多数关系数据库查询语言都是以关系代数、元组关系演算 和域关系演算的运算系统为基础建立起来的。 查询语言 关系运算类型 设计者 应用范围 数据库系统 (1)ISBL关系代数 IBM英国中心 少用 (2)QUEL元组演算 加州大学 较广泛 INGRES (3)QBE域演算 IBM公司 广泛 DB2 (4)SQL (1)+(2)+(3) IBM 最广泛 数据库语言的两种使用方式: 1。交互使用:用户直接向数据库系统输入语句,请求服务。 2。嵌入式使用:把数据库语言嵌入到某个程序设计语言中。 这个程序设计语言称为宿主语言。宿主语言程序中的数据库 语言语句,其功能是向数据库系统提出操作要求。

  30. B51 一.ISBL语言简介 这是IBM英国科学中心为PRTV设计的一种纯关系代数查询语言, 除了关系代数操作语句之 外,还增加了下述语句: 下表列出了ISBL基本操作 符号与关系代数的对照情况 LIST 打印句后表达式的结果 ‘=’ 把表达式结果赋给一个关系变量 ‘N!’ 把表达式形式地赋给一个关系变量R, 后边的语句用到R时,才即时赋值. 关系代数 ISBL RS R+S R-S R-S RS RS (R) R:F A (R) R%A RS R*S ISBL的集合运算与关系代数标准定义的区别 1.并/交运算要求两个关系对应属性同名; 2.当R和S属性不同名时,R-S的定义是: 设R、S的属性集分别是、, R-S=R-(S-R ) 为了灵活运算,ISBL的投影操作允许属性重命名。

  31. B52 二.QUEL语言简介 这种语言近似于元组关系演算语言,是INGRESS数据库系统 的数据定义和操纵语言,可作交互式语言和程序设计语言的 子语言使用。其功能分为以下四类: 1. 数据定义 2. 数据查询 3. 数据维护 4. 视图定义

  32. B52a 1.数据定义:建立关系create, 建立索引index, 修改关系结构modify, 删除关系或索引destory [例]建立关系employee Create employee {name=test(15), /*15字节变长字串*/ ssn=c9, /*9字节定长字串*/ bdate=date, /*日期型数据*/ address=test(30), /*30字节变长字串*/ sex=c1, /*1字节定长字串*/ salary=money, /*16位数,末两位是角分*/ supperssn=c9, /*9字节定长字串*/ dno=i4, /*4字节正数*/ }

  33. B52b 2.数据查询:查询语句的符号形式是 RANGE OF V1 IS R1 RANGE OF V2 IS R2      RANGE OF Vk IS Rk RETRIVE (V1.Ai1 ,  , Vn.Ain ) WHERE C(V1 ,  ,Vk ) 这个语句等价于元组关系演算表达式:{ t | (V1)(Vk) ( ** ) } **: R1(V1)Rk(Vk)t[1]= V1[i1]t[n]=Vn[in] C(V1Vk) 指出每个关系 的元组变量 查询元组的属性 查询元组的条件 [例] 查询研究部雇员的姓名地址 reange of E is employee reange of D is department retrieve (E.name,E.address) where D.name=‘研究部’ and D.dnunber=E.dno

  34. B52c 3.数据维护 条件追加元组append:当满足条件时为指定的关系增加元组; 条件删除元组delete: 对指定的关系删除满足条件的元组; 条件修改元组replace:对指定的关系修改满足条件的元组; [例1] 为关系employee增加一个元组 range of E is employee append to employee (name=‘王明’,ssn=‘653298653’, bdate=’30/03/1952’, address=‘哈尔滨市学府路24号’, sex=‘男’,salary=672 superssn=‘967523453’,dno=4 ) [例2] 对研究部雇员工资提高10% range of E is employee range of D is department replce E (salary=salary*1.1) where E.dno=D.number and D.dname=‘研究部’

  35. B52d 4.视图定义 RANGE OF V1 IS R1 RANGE OF V2 IS R2      RANGE OF Vk IS Rk DEFINE VIEW view_name(A1=Vi1.Bi1 ,,An=Vin.Bin ) WHERE C(V1 ,  ,Vk ) 其中视图view_name的属性Aj 是Rij 的属性Bij ,1jn. [例]使用关系employee,works_on和project定义视图works_on1 range of E of employee range of W of works_on range of P of project define view works_on1 (name=E.name , pname==P.name, hours=W.hours) where E.ssn=W.ssn and P.pnumber=W.pno

  36. B53 三.QBE语言 QBE是IBM公司商品化关系数据库系统DB2的可选用户界 面之一。QBE是一个基于域演算的数据库语言。用户工作 方式是在关系框架上填写简单的示例信息作为查询请求。 所有操作符后跟圆点,域变量或样板的格式为‘_字符串’, 其它类型的字串为常值。下边介绍QBE的功能: 1. 数据定义 2. 数据查询 3. 数据维护 4. 视图定义

  37. B53a [例]建立关系DEPARTMENT 对首行各纵栏,从左到右填: (命令) I. department I. (第一属性名称)DNAME (第二属性名称)DNUMBER (第三属性名称)MGRSSN (第四属性名称)STARTDT 然后按首列提示定义各属性: KEY I.(是否主属性) TYPE I.(数据类型) DOMAIN I.(值域名称) INVERSION I.(是否索引) 1. 数据定义 QBE系统维护一个表,即关系目录 表。它包含数据库中所有关系的名 字、属性和说明信息。 关系框架的一般格式 关系名 属性名 属性名 属性名 操作命令1 元组属性 操作命令2 或 操作命令3 查询要求信息 I.DEPARTMENT I. DNAME DNUMBER MGRSSN STARTDT KEY I. N Y N N TYPE I. CHAR INTEGER INTEGER INTEGER DOMAIN I. NAMES NUMBERS SSN DATE INVERSION I. N Y N N

  38. B53b • 数据查询 • 用户通过终端的按键,要求QBE系统显示所有关系名。然后选择感 • 兴趣的关系属性框架。之后填上域变量和常数表示查询要求。 • 在数据查询框架中,若域变量名前出现操作符‘P.’,系统显示该域 • 变量对应的关系属性值。 • [例1]查询雇员张平的生日和地址。 Employee name ssn bdate address sex salary superssn dno 张平 P. P. [例2]查询为工程项目5或7每周工作时间超过20小时的雇员证号。 works_on essn pno hours P. 5 >20 P. 7 >20 works_on essn pno hours P. _PX _HX 或者: 不同行的条件表示‘或’关系 条件框架 _HX>20 AND (_PX=5 OR _PX=7)

  39. B53c 3.数据维护 QBE有三个数据维护操作:插入元组 I. 删除元组 D. 修改元组 U. [例1]插入新雇员。 Employee name ssn bdate address sex salary superssn dno I. 张平 123 03/22/57 东山路2号 男 678 128 5 [例2]删除工资<500元的雇员元组。 Employee name ssn bdate address sex salary superssn dno D. <500 [例2]把张平工资增加10%. Employee name ssn bdate address sex salary superssn dno 张平 U._S*1.1

  40. B53d 4.视图定义 建立视图的方法类似于建立关系。 [例]建立视图BILLS, 包括定货人(name)、定购商品(item)和应付款项(charge)。应付款 项是按所有供应商品最低价格计算,即数量_q乘以最低价格。 查询时,视图的数据由相关的关系即时算出,即:按视图指示的 订货人,在关系ORDER查出订购商品和数量_q。按订购商品, 在关系SUPPLIERS查出价格集合,取最小值_p。最后在视图显示 最低价格与数量的乘积,即应付款项。 • VIEW BILLS I. name item charge • _oakes _hotdog _q*min.all._P ORDERS name item quantity _oakes _hotdog _q SUPPLIERS name saddr item price _hotdog _P

  41. B54 • 结构查询语言SQL • SQL的全名是Structured Query Language,即‘结构查询语言’。 • SQL具有定义、查询、更新和控制等多种功能。 • 第一个SQL语言版本是由IBM公司SAN JOSE实验室设计的。 • 从二十世纪七十年代开始,在推出的关系型数据库系统产品如 • ORACLE、SQL/DS、DB2、SYBASE上实现了SQL语言。1986年 • 美国国家标准局(ANSI)颁布了美国标准的SQL。次年,国际标准 • 化组织(ISO)采纳为国际标准。经过修改和扩充,在1992年推出新 • 标准,即SQL2(或称SQL92)。新标准SQL3将包括了数据库的许多 • 新概念。 • SQL既可以交互方式使用,也可以作为程序设计语言子语言 • 使用,是一个兼有关系代数和元组关系演算特征的语言。它包含 • 数据定义语句和数据操纵语句,提供四类功能: • 1.数据定义 • 2.数据查询 • 3.数据维护 • 4.视图定义

  42. B54a 1.数据定义 建立关系create table 修改关系alter table 删除关系drop table 建立索引create index 删除索引drop index [例1]建立关系employee Create table employee (name varchar(15),/*变长字串*/ ssn char(9), /*定长字串*/ bdate char(9), address varchar(30), sex char(1), salary integer,四字节整数 superssn char(9), dno integer). 接下页

  43. B54a1 [例2] 对关系employee增加属性job: alter table employee add job varchar(12) [例3] 删除关系employee: drop table employee [例4] 删除索引ssn_index: drop index ssn_index [例5] 在关系employee建立按键ssn升序排列的 聚集索引文件ssn_index: create unique index ssn_index on employee(ssn asc) cluster 接下页

  44. B54b 2.数据查询 SQL数据查询格式是 SELECT <属性表> FROM <关系名> WHERE <条件式> 例1 列出工资<2000元的雇员姓名和证号 SELECT name,ssn,bdate FROM employee WHERE salary<2000 例2 列出全体雇员工资(不重复) SELECT distinct salary FROM employee 接下页

  45. B54b1 例3 列出哈尔滨工程项目的项目号,部门号,负责人的姓名和地址 SELECT pnumber,dnum,name,bdate,address FROM employee,department,#project WHERE ssn = mgrssn and dnumber = dnum and plocation=‘哈尔滨’ 姓名 地址 证号 ---------------------- ------------- mgrssn 负责人 部门号 ------- ---- mgrssn dnum 部门号 所在地 ------- ---- dnum 哈尔滨 2:department 1:#project 3:employee 3:employee 1:#prot 按证号mgrssn找 元组,完成查询 按部门号dnum 找元组得mgrssn 按所在地哈尔滨 找元组得dnum employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 department(dname, dnumber, mgrssn, mgrstartdate) 部门 部门名 部门号 负责人证号 负责人上任日期 #project( pname, pnumber, dnum, plocaion) 工程项目 项目名 项目号 部门号 项目所在地 接下页

  46. B54b2 例4 列出每位雇员及其领导的姓名 SELECT E.name , S.name FROM employee E S WHERE e.superssn=s.ssn 证号e.superssn 的雇员叫什么名? 证号 姓名 ---- ----- ---- ----- ---- ----- 证号 上司证号 0001 e.superssn 0002 0003 循环扫描 2:employee S 返回: 证号e.superssn 的雇员姓名 1:employee E 按e.superssn=s.ssn 找元组,取姓名返回 逐行扫描取出 e.superssn employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 接下页

  47. B54b3 例5 列出研究部雇员名字地址 SELECT E.name,E.address FROM employee E,department D WHERE E.dno =D.dnumber and D.name=‘研究部’ 姓名 地址 部门号 ---- ----- ---- ----- ---- ----- 部门号 部门名 ------- ---- ------- ---- dnumber 研究部 取出部门号为 dnumber的所有 员工的姓名地址 2:employee 2:employee 1:department 1:department 给出研究部的 部门号dnumber 逐行扫描,按条件 dno=dnumber找元组 找到研究部元组 取得dnumber employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 department(dname, dnumber, mgrssn, mgrstartdate) 部门 部门名 部门号 负责人证号 负责人上任日期 接下页

  48. B54 b4 例6 列出项目的编号和名称,要求张平是部门领导或参与者 (SELECT pnumber,pname FROM #project,department,employee WHERE dnum==dnumber and mgrssn=ssn and name=‘张平’) UNION (SELECT pnumber,pname FROM project,works_on,employee WHERE pnumber=pno and essn=ssn and name=‘张平’) 证号 姓名 ---- ----- ssn 张平 经理证号 部门号 ------- ---- ssn dnumber 项目号 部门号 ------- ---- pppp dnumber 1:employee 2:department 3:#project 找出雇员张平的 证号ssn 查出经理证号为ssn 的部门编号dnumber 查出部门号为 dnumber的项目号 #project( pname, pnumber, dnum, plocaion) 工程项目 项目名 项目号 部门号 项目所在地 department(dname, dnumber, mgrssn, mgrstartdate) 部门 部门名 部门号 负责人证号 负责人上任日期 employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 查询 ‘张平是项目 部门领导‘ 的项目 接下页

  49. B54 b5 例6 列出项目的编号和名称,要求张平是部门领导或参与者 (SELECT pnumber,pname FROM #project,department,employee WHERE dnum==dnumber and mgrssn=ssn and name=‘张平’) UNION (SELECT pnumber,pname FROM project,works_on,employee WHERE pnumber=pno and essn=ssn and name=‘张平’) 证号 姓名 ---- ----- ---- ----- ssn 张平 雇员证号 项目号 ------- ---- ------- ---- ssn pno 项目号 项目名 ------- ---- ------- ---- pno dnumber 1:employee 2:works_on 3:#project 找出雇员张平的 证号ssn 查出项目成员证号 为ssn的项目号pno 查出项目号为 pno的项目名 #project( pname, pnumber, dnum, plocaion) 工程项目 项目名 项目号 部门号 项目所在地 works_on( essn, pno, hours) 工程人员 雇员证号 项目号 小时 employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 查询 ‘张平是项目成员‘ 的项目 接下页

  50. 例7 列出项目编号,要求张平是部门领导或参与者 SELECT distinct pnumber FROM #project WHERE pnumber in (SELECT pnumber FROM department,employee WHERE dnum=dnumber and mgrssn=ssn and name=‘张平’) OR pnumber in (SELECT pnumber FROM works_on,employee WHERE pnumber=pno and essn=ssn and name=‘张平’) B54 b6 项目表部门表雇员表 项目表工程人员表雇员表 #project( pname, pnumber, dnum, plocaion) 工程项目 项目名 项目号 部门号 项目所在地 department(dname, dnumber, mgrssn, mgrstartdate) 部门 部门名 部门号 负责人证号 负责人上任日期 works_on( essn, pno, hours) 工程人员 雇员证号 项目号 小时 employee(name,ssn,bdate,address,sex,salary,superssn,dno) 雇员 姓名 证号生日 地址 性别 工资 上司证号 部门 接下页

More Related