并
对应代码select * from table1 union select * from table2
与数学概念中的并集类似,会将两个数据表中的数据以并集的形式输出。
EG.
现有table1:
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:
table2:
运行交集的代码:
差
对应代码
select * from table1 t1 where not EXISTS (
select * from table2 t2 where t1.id = t2.id
);
与数学概念中的差集类似,会将两个数据表中的数据以差集的形式输出。
EG.
现有table1:
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:
table2:
查询结果
这个查询将返回两个表中所有可能的组合,也就是笛卡尔积。
关系代数的逻辑符号
实例
取出来的值要同时满足属性列1=5,3=6,2(属性列)>7(属性列)
关系代数查询优化原则
- 提早执行选取运算。对于有选择运算的表达式,应优化成尽可能先执行选择运算的等价表达式,以得到较小的中间结果,减少运算量以及从外存读块的次数。
- 合并乘积与其后的选择运算为连接运算。在表达式中,当乘积运算后面是选择运算时,应该合并为连接运算,使选择与乘积一同完成,以免做完乘积后,需再扫描一个大的乘积关系进行选择运算。
- 将投影运算与其后的其他运算同时进行,以免重复扫描关系。
- 将投影运算和其前后的二目运算结合起来,使得没有必要为去掉某些字段再扫描一遍关系。
- 在执行连接前对关系适当地预处理,就能快速地找到要连接的元组。方法有两种:索引连接法、排序合并连接法。
- 存储公共子表达式。对于有公共子表达式的结果应存于外存(中间结果),这样,当从外存读出它的时间比计算的时间少时,就可节约操作时间。