【数据库系统】关系代数的运算与实践


并的符号
对应代码select * from table1 union select * from table2
与数学概念中的并集类似,会将两个数据表中的数据以并集的形式输出。
EG.
现有table1:

table1

table2:
table2

运行select * from table1 union select * from table2
查询结果

可用发现俩个表各自有的数据都输出了且相同的数据没有再次输出这就是并集

交集
对应代码

select * from table1 t1 where  EXISTS (
	select * from table2 t2 where t1.id= t2.id
);

与数学概念中的交集类似,会将两个数据表中的数据以交集的形式输出。交集是两个表都有的元素
EG.
现有table1:
table1

table2:
table2

运行交集的代码:
查询结果

差集的写法
对应代码

select * from table1 t1 where not EXISTS (
	select * from table2 t2 where t1.id = t2.id 
);

与数学概念中的差集类似,会将两个数据表中的数据以差集的形式输出。
EG.
现有table1:

table1

table2:
table2
查询结果:
查询结果

投影

投影的写法
实际代码:select col from table1
接下来用简单示例来演示
简单示例

我们可以发现事实上投影就是只取对应字段的值

连接

连接

SELECT *
FROM table1
JOIN table3 ON table1.id = table3.id;

EG:
table1:
在这里插入图片描述
table3:
在这里插入图片描述

查询结果
在这里插入图片描述

同时在连接符号下还可以写条件,会筛除不满足的数据
在这里插入图片描述

选择

选择
事实上就是加了一层判断
实际代码:select * from table1 where id =1

笛卡尔积

在这里插入图片描述
实际代码

SELECT *
FROM table1
CROSS JOIN table2;

笛卡尔积其实就是两个表中所有可能的组合
EG.
现有table1:

table1

table2:
table2
查询结果
在这里插入图片描述

这个查询将返回两个表中所有可能的组合,也就是笛卡尔积。

关系代数的逻辑符号

在这里插入图片描述
实例
在这里插入图片描述
取出来的值要同时满足属性列1=5,3=6,2(属性列)>7(属性列)

关系代数查询优化原则

  1. 提早执行选取运算。对于有选择运算的表达式,应优化成尽可能先执行选择运算的等价表达式,以得到较小的中间结果,减少运算量以及从外存读块的次数。
  2. 合并乘积与其后的选择运算为连接运算。在表达式中,当乘积运算后面是选择运算时,应该合并为连接运算,使选择与乘积一同完成,以免做完乘积后,需再扫描一个大的乘积关系进行选择运算。
  3. 将投影运算与其后的其他运算同时进行,以免重复扫描关系。
  4. 将投影运算和其前后的二目运算结合起来,使得没有必要为去掉某些字段再扫描一遍关系。
  5. 在执行连接前对关系适当地预处理,就能快速地找到要连接的元组。方法有两种:索引连接法、排序合并连接法。
  6. 存储公共子表达式。对于有公共子表达式的结果应存于外存(中间结果),这样,当从外存读出它的时间比计算的时间少时,就可节约操作时间。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
数据库关系代数运算有很多种,下面是一个例子: 假设有两个关系表: 表1:学生表(Student) | 学号 | 姓名 | 年龄 | 性别 | |------|------|------|------| | 001 | 张三 | 18 | 男 | | 002 | 李四 | 20 | 男 | | 003 | 王五 | 19 | 女 | 表2:成绩表(Score) | 学号 | 课程 | 成绩 | |------|------|------| | 001 | 数学 | 85 | | 002 | 数学 | 90 | | 003 | 数学 | 95 | | 001 | 英语 | 80 | | 002 | 英语 | 85 | | 003 | 英语 | 90 | 我们可以使用关系代数运算来进行一些操作,比如: 1. 投影(Projection):选择出指定的列 - 投影出学生表的学号和姓名列,可以表示为:π_学号, 姓名(Student) 结果为: | 学号 | 姓名 | |------|------| | 001 | 张三 | | 002 | 李四 | | 003 | 王五 | 2. 选择(Selection):根据条件选择出满足条件的行 - 选择出成绩表课程为数学的记录,可以表示为:σ_课程='数学'(Score) 结果为: | 学号 | 课程 | 成绩 | |------|------|------| | 001 | 数学 | 85 | | 002 | 数学 | 90 | | 003 | 数学 | 95 | 3. 连接(Join):将两个关系表按照指定的条件连接起来 - 将学生表和成绩表按照学号连接起来,可以表示为:Student ⨝_学号=学号 Score 结果为: | 学号 | 姓名 | 年龄 | 性别 | 课程 | 成绩 | |------|------|------|------|------|------| | 001 | 张三 | 18 | 男 | 数学 | 85 | | 001 | 张三 | 18 | 男 | 英语 | 80 | | 002 | 李四 | 20 | 男 | 数学 | 90 | | 002 | 李四 | 20 | 男 | 英语 | 85 | | 003 | 王五 | 19 | 女 | 数学 | 95 | | 003 | 王五 | 19 | 女 | 英语 | 90 | 这只是数据库关系代数运算的一部分,还有其他运算符和操作可以用来处理关系表的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值