关系代数定义:
关系代数是以关系为运算对象的一组高级运算的集合。关系代数的运算有集合运算(集合<表>与集合<表>之间的运算)和关系运算(集合<表>内部的运算)
集合运算:
并运算: R U S 差运算: R - S 交运算: R ∩ B 笛卡儿积: R x S (组合运算)
并,交,差(是对各集合元组的重新组合;要求:参加集合操作的各结果表的列数必须相同,对应项的数据类型也必须相同)
关系运算:
选择 , σF(R)={t|t∈R∧F(t)=True}σF(R)={t|t∈R∧F(t)=True} ------水平分割表
投影 , πA(R)={t[A]|t∈R}πA(R)={t[A]|t∈R} -------垂直分割表
连接 【/* 这里是比较运算符 */,
为大于,小于的连接叫比较连接,
为等于的连接叫等值连接,自然连接 ⋈ /*它是等值连接的特殊情况,结果集中公共的属性只保留一个------去除重复列。两表关联,外键主建出现在同一集合里(外键和主键就是重复的列,要去除一列),2*/自然,
= σ XθY(R×S),扩展的还有外连接 】
等值连接和自然连接的区别
sql语句的*使用的是等值连接:
sql语句要使用自然连接,需要自己手动指定列(去除重复列):自然连接的例子:
自然连接和外连接的区别:(d:左外连接,f:全连接)
除运算 ÷:
下面以电力抢修工程数据库为例:
抢修工程计划表Salvaging,配电物资库存记录表Stock,配电抢修物资领料出库表Out_stock
查询说明:
结果:
关系代数总结:(先选择运算,再笛卡尔积,最后投影,选择)
sql语句连接查询:
1.连接查询主要包括:
等值连接查询(比较运算符为“ = ”),自然连接查询,非等值连接查询(比较运算符为其他的连接查询),自身连接查 询,外连接查询和复合条件连接查询 (多个连接条件)
2.连接查询执行过程:
从概念上讲,DBMS,执行连接操作的过程是:首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后将表一中的第一个=元组与该元祖拼接起来,形成结果表中的一个元组,表2全部查找完后再找表1中的第2个元组,然后重头开始扫描表2,逐一查找满足连接条件的元组,找到后将表1中的第2个元组与该元组拼接起来,形成结果表中的一个元组,重复上述操作,直到表1中的全部元组都处理完毕为止
3.外连接查询:
左外连接:为右边的表(副表)增加一个万能的行,该行全部由空值组成,它可以和左边的表(主表)中不满足连接条件的元组进行连接,由于这个万能行的各列全部是空值,因此在本例中的连接结果中有一行来自副表的属性值全部是空值【left join.. on是left outer join...on的缩写】
4.自身连接查询:
为要自身查询的表取两个别名就OK了
查询领取了部门1的物资又领取了部门2的物资的员工姓名
5.集合查询:(mysql,支持UNION 关键字,不支持INTERSECT----用 INNER JOIN ...ON() 和 EXCEPT关键字-----用where..not in(),where exists(select *.....)查的是内层查询是否有返回值,列明用*,给出具体的列明无意义)
SELECT Emp_name FROM employee WHERE supplies_id='D02'
UNION | INTERSECT | EXCEPT
SELECT Emp_name FROM employee WHERE supplies_id='D01'