前言
需要课本定义的移步至:CSDN:数据库 元组演算表达式 本文仅描述对部分例题的解答;
例子
附上 【例1-3】 的图表: Student
学号(Sno) 姓名(Sname) 性别(Ssex) 年龄(Sage) 所在系(sdept) 201215121 李勇 男 20 CS 201215122 刘晨 女 19 CS 201215123 王敏 女 18 MA 201215125 张立 男 19 IS
【例1】 查询信息系 (IS 系 ) 全体学生:
问:SIS = { Student(t) ∧ t[5] = ‘IS’ } 解: 1. Student(t) :可暂时将 t 和 Student 的图当成一样的; 2. t[5] = ‘IS’ :t 的第5个变量,也就是 Student 中所在系Sdept中的值要等于“IS”; 3. 将第1和第2点 “交 ∧” 运算后,就得到SIS ={(201215125,张立,男,19,IS)};图如下:
学号(Sno) 姓名(Sname) 性别(Ssex) 年龄(Sage) 所在系(sdept) 201215125 张立 男 19 IS
【例2】 查询年龄小于 20 岁的学生:
S20 ={Student(t) ∧ t[4]<20} 解:这题和上一题差不多,只是选择的要求不一样; 1. Student(t) :可暂时将 t 和 Student 的图当成一样的; 2. t[4]<20:t 的第4个变量,也就是 Student 中年龄Sage中的值要小于20; 3. 将第1和第2点 “交 ∧” 运算后,就得到S20 ={(201215122,刘晨,女 ,19,CS),(201215123,王敏,女,18,MA),(201215125,张立,男,19,IS)};图如下:
学号(Sno) 姓名(Sname) 性别(Ssex) 年龄(Sage) 所在系(sdept) 201215122 刘晨 女 19 CS 201215123 王敏 女 18 MA 201215125 张立 男 19 IS
【例3】 查询学生的姓名和所在系:
S1 ={ t(2) | ( ∃u )( Student(u) ∧ t[1]=u[2] ∧ t[2]=u[5] ) } 解:
这题求的 t 不是 u Student(u): u 是Student的元组; ∃u:存在 u 满足t[1]=u[2] 和 t[2]=u[5], t[1]=u[2]: t 的第一列是 u 中第二列; t[2]=u[5] :t 的第二列是 u 中第五列; 最后得出结果S1 ={(李勇,CS),(刘晨,CS),(王敏,MA),(张立,IS) }
姓名(Sname) 所在系(sdept) 李勇 CS 刘晨 CS 王敏 MA 张立 IS
【例4】 例如,有两个关系 R 和 S,计算:
R1={ t | R(t) ∧ ¬ S(t)} R2={ t | ( ∃ u)(S(t) ∧ R(u) ∧ t[3]<u[2]) } R3={ t | (∀ u)(R(t) ∧ S(u) ∧ t[3]>u[1]) }
解:
(1)… { t | … : 题目要求的是元组变量 t ;
(2)¬ S(t): t 是关系S之外的元组变量;
(3)R(t) : t 是关系R中的元组变量;
(4)R(t) ∧ ¬ S(t):将(1)(2)中的值进行“交∧”运算,删去共有元组变量{(1,2,3)};
(5)最后得出结果如下表:
解:
(1)… { t | … : 题目要求的是元组变量 t ;
(2)S(t): t 是关系S中的元组变量;
(3)R(u) : u 是关系R中的元组变量;
(4)( ∃ u):u 中任意一元组满足条件即可;
(5)t[3]<u[2]:可以看成S中的C列 小于 R中的B列;满足条件的是t[3]中的3、6;
(6)最后得出结果如下表:
解:
(1)… { t | … : 题目要求的是元组变量 t ;
(2)R(t): t 是关系R中的元组变量;
(3)S(u) : u 是关系S中的元组变量;
(4)(∀ u):要求 u 中所有元组满足条件;
(5)t[3]>u[1]:R中的C列 大于 S中的A列;满足条件的是t[3]中的6、9;
(6)最后得出结果如下表:
总结
1. 关系R可以表示为{ t | R(t) }
在元组关系演算中出现关系R(t)、S(u)等,则可以将 t、u 理解成与R、S具有相同的变量值,图或表上的元组变量也是相同的; R(t) 通常搭配其他关系来进行选择与筛选;
2. 在元组演算公式中,各种运算符的优先次序为:
① 算术比较运算符最高;
② 量词次之,且 ∃ 的优先级高于 ∀ 的优先级;
③ 逻辑运算符最低,且 ﹁ 的优先级高于 ∧ 的优先级, ∧ 的优先级高于 ∨ 的优先级;
④ 加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循 ①②③ 各项。
3. 做题顺序 (我的做题方式) :
观察题目所求的元组变量是什么; 看所求元组变量 t 是哪个关系R 中的元组, 并查看是否还有其他元组变量; 看 t 的量词范围,按照∃ 的优先级高于 ∀ 的优先级,先让心里有个底,后面好筛选条件; 对元组演算公式进行分块,即用∧ 或 ∨ 将整个公式分成不同的小模块; 配合量词,对每个模块进行选择等操作; 将所有模块通过∧ 或 ∨ 的联系,再一次进行筛选; 最后筛选出来的元组就是我们要求的东西了;
资料参考