一道易错题检验关系代数掌握情况(含详细解答)

简介: 在数据库中的关系代数部分知识点的时候,会有一个初学者很容易犯的错误,包括博主本人第一次在做的时候也踩坑了,所以分享给各位小伙伴,避免出现类似情况,如果忘记了知识点的话,可以回顾一下这篇文章【关系模型知识点总结(3)—— 关系操作中的关系代数(含题目及详细分析)】

一、前言


在数据库中的关系代数部分知识点的时候,会有一个初学者很容易犯的错误,包括博主本人第一次在做的时候也踩坑了,所以分享给各位小伙伴,避免出现类似情况,如果忘记了知识点的话,可以回顾一下这篇文章【关系模型知识点总结(3)—— 关系操作中的关系代数(含题目及详细分析)】


二、题目


Customer


客户编号(cid) 姓名(cname) 性别(csex) 地址(caddress) 邮编(czip) 电话(ctel) 年龄(cage)
44000001 李琦 上海市黄浦区南京路1号 200001 13818893456 20
44000002 张岩 上海市浦东新区石桥路28弄 200120 13310174456 30
44000003 陈冬 广州市越秀区北京路186号 510030 13925056669 22
44000004 刘敏 广州市越秀区八旗二马路68号 510115 13802297825 27


Orders


订单编号(oid) 客户编号(cid) 商品编号(gid) 订购金额(oamount) 订购数量(osum) 订购日期(orderdate)
1 44000001 15020001 280 8 2022-9-12
1 44000002 15010001 149999 2 2022-9-12
1 44000002 15020001 9999 3 2022-9-25
1 44000003 15030001 299 4 2022-9-30
1 44000005 15010002 6999 3 2022-10-5


Goods


商品编号(gid) 商品名称(gname) 商品类型(gtype) 型号(model) 库存量(gstock) 单价(gprice)
15010001 lv包包 奢侈品 人造皮革 10 149999
15010002 格力空调 家用电器 两匹半 42 6999
15020001 西门子冰箱 家用电器 630立升 3 9999
15030001 口红 化妆品 色号999 色号999 79



根据Customer,Orders,Goods三个关系,用关系代数表达式表示:查询客户“张岩”购买的商品名称及购买数量


三、解题思路


1.在customer表中找到并提取张岩的客户编号(cid)


这里需要先提取出来张岩这一行(选择),然后将代表他客户编号的列提取出来,与下一张表组成新的表,即自然连接Orders表,以便在第二张Orders表中通过cid提取出它的gid并组成新的表,即 投影


  • σcname=‘张岩’(Customers)
  • Πcid( σcname=‘张岩’(Customers))


2.将提取出来的cid与Orders表连接后提取商品编号(gid)


这里使用自然连接并投影


  • Πcid( σcname=‘张岩’(Customers))⋈ Orders
  • Πcid、gid( σcname=‘张岩’(Customers))⋈ Orders


3.连接Goods表后提取出订购数量(osum)和商品名称(gname)并组成新表


同样地,自然连接 后 投影


  • Πcid、gid( σcname=‘张岩’(Customers))⋈ Orders ⋈ Goods
  • Πosum、gname(Πcid、gid( σcname=‘张岩’(Customers))⋈ Orders ⋈ Goods)


四、易错点


这里的易错点在于当我们第一步提取出来cid以后,想到如果在Orders表周末和找到一个cid=提取出来的cid的元组,不就能再提取出来它的osum和gid,投影形成新的表了吗?同样的操作提取出来gname和gid投影形成新的表,两表一连接就完事儿了


但是有个致命的错误:提取出来的属性形成的是一个只含一个元素的表,不能等于一个值


Πcid( σcname=‘张岩’(Customers))的结果如下:


客户编号(cid)
44000002


所以不能出现类似 cid = Πcid( σcname=‘张岩’(Customers))的操作


五、其它注意事项


  • 当我们运用选择的运算时,如果出现两个及以上的条件,要用∧来连接
  • 不可以用逗号隔开


例如:


要选择一个年龄大于20岁且是男性的客户,应该这么写:σcage>20∧csex=‘男’(Customer)


六、结语


本文的例题需要读者先自己做一遍,体会一下过程再看详细解答,有任何问题欢迎评论留言

相关文章
|
6月前
|
算法 Java C++
试题 算法训练 集合运算
试题 算法训练 集合运算
36 1
|
6月前
|
算法 Java C++
试题 算法训练 幂方分解
试题 算法训练 幂方分解
48 0
|
6月前
|
安全
R语言中的Wilcoxon符号秩检验与配对学生t检验
R语言中的Wilcoxon符号秩检验与配对学生t检验
|
6月前
|
算法 C++
【软件设计师备考 专题 】数学基础知识:命题逻辑、谓词逻辑、形式逻辑与数值计算
【软件设计师备考 专题 】数学基础知识:命题逻辑、谓词逻辑、形式逻辑与数值计算
73 0
|
6月前
|
C++
【SPSS】二项分布检验详细操作教程(附案例实战)
【SPSS】二项分布检验详细操作教程(附案例实战)
509 0
|
6月前
|
C++
【SPSS】游程检验-变量值随机性检验和两独立样本的W-W游程检验详细操作教程(附案例实战)
【SPSS】游程检验-变量值随机性检验和两独立样本的W-W游程检验详细操作教程(附案例实战)
208 0
机房收费系统—组合查询逻辑分析
机房收费系统—组合查询逻辑分析
|
存储 算法
【系统分析】数值算法——动态规划法
【系统分析】数值算法——动态规划法
114 0
|
算法
【系统分析】数值算法——贪心法
【系统分析】数值算法——贪心法
96 0
|
数据挖掘 Python
python数据分析 - T检验与F检验:二组数据那个更好?(一)
python数据分析 - T检验与F检验:二组数据那个更好?(一)
225 0