关系代数全解
- 格式:docx
- 大小:104.00 KB
- 文档页数:12
【数据库复习】关系代数
关系代数
问:为何称为代数?
答:因为存在操作符和操作数,操作数为表,操作符为交、并等;
关系代数有分为基于集合的关系代数和基于包的关系代数;
关系代数的基本操作:并、选择、投影、笛卡尔积、差、重命名;
基本操作的意思是其他的操作符可以通过基本操作推出;
注意:如果我们使用并、交、差运算,必须保证R和S的属性集合是相同的,当然如果不同,也可以通过重命名操作;
补充:1.自然连接
2. θ连接
3.重命名
表达式树
基于包的关系代数
1.并
如果元组t在R中出现m次,S中出现n次,则在R∪S中出现m+n次;
2.交
如果元组t在R中出现m次,S中出现n次,则R∩S中出现min(m,n)次;
3.差
如果元组t在R中出现m次,S中出现n次,则R-S中出现(1)如果m>n,则出现m-n次;(2)如果m<>
4.消除重复操作符
δ(R) 能对关系R消除重复元组;
5.聚集操作符
SUM(A)
AVG(A)
MIN(A)
MAX(A)
COUNT(A)
其中A为某个属性;
6.分组操作符
γ
包含了以某个属性作为分组属性,还有聚集操作符;
7.排序元组
τA(R) 表示根据A属性进行排序;
8.外连接
左外连接:
右外连接:
9.扩展投影运算
关系代数表达式的分步表示
因为用一个表达式直接表示复杂的代数表达式会很不清楚,因此我们可以通过分步表示;
比如:
可以表示为:。
第3章关系代数3.1 集合运算u传统的集合运算包括:Ø并(∪)Ø交(∩)Ø差(-)Ø广义笛卡尔积(×)并运算u两个已知关系R和S的并将产生一个包含R、S中所有元组的新关系,记作R∪S。
u注意:Ø新关系中将R和S进行并运算,同时去掉重复的元组。
Ø关系R和S同构,即具有相同的属性。
差运算u两个已知的关系R和S的差,是所有属于R 但不属于S的元组的集合,记作R-S。
u注意:Ø关系R与S的差运算,即是删除关系R中属于关系S的所有元组的运算。
Ø关系R和S同构,即具有相同的属性。
交运算u两个已知关系R和S的交,是属于R而且也属于S的元组组成的新关系,记作R ∩S。
u注意:Ø关系R与S的交运算,即是选择在关系R和S中均存在的元组。
Ø关系R和S同构,即具有相同的属性。
笛卡尔积运算u两个已知的关系R和S的笛卡尔积,是R中每个元组与S中每个元组连接组成的新关系,记作R ×S。
u注意:Ø如果含有m个元组的R与含有n个元组的S进行笛卡尔积运算,得到的新关系含有m ×n个元组。
Ø该运算是一个联接运算。
3.2 特殊的关系运算u特殊的关系运算包括:Ø投影(∏)Ø选择(δ)Ø连接(wv)Ø除(÷)投影运算u投影运算,即是选择关系中若干个属性组成新的关系,并去掉重复元组,是对关系(R)。
的属性进行了筛选,记作∏Au注意:ØA即关系R的属性子列表,各属性之间可用逗号来分隔,也可用序号来标识各属性。
Ø投影运算是一个纵向的运算。
Ø投影运算是一个一元运算。
选择运算u选择是根据给定条件选择关系R中的若干元组组成新的关系,是对关系的元组进行筛。
选。
记作δFu注意:Ø选择条件F是一个逻辑表达式。
Ø选择运算是一个一元运算。
因为关系被解释为某个谓词的外延,关系代数的每个运算在谓词演算中都有对应者。
例如,自然连接是逻辑AND()的对应者。
如果关系R和S分别表示谓词p1和p2的外延,则R和S的自然连接(R S)是表示谓词p1p2的外延的关系。
认识到 Codd 的代数事实上关于一阶逻辑不完备是很重要的。
实现它会引起不可R S = {r s| r R, s S}主条目:投影 (关系代数)投影是写为的一元运算,这里的是属性名字的集合。
这种投影的结果定义为当所有在中的元组被限制为集合的时候所获得的集合。
广义选择是写为 的一元运算,这里的 是由正常选择中所允许的原子和逻辑算子 (与)、(或) 和 (非)构成的命题公式。
这种选择选出 中使成立的所有元组。
主条目:重命名 (关系代数) 重命名是写为的一元运算,这里的结果同一于,除了在所有元组中的 字段被重命名为 字段之外。
它被简单的用来重命名关系的属性或关系自身。
连接和类似连接的运算自然连接 (⋈)自然连接是写为 (R ⋈ S ) 的二元运算,这里的 R 和 S 是关系。
[1]自然连接的结果是在 R 和 S 中的在它们的公共属性名字上相等的所有元组的组合。
例如下面是表格“雇员”和“部门”和它们的自然连接:雇员NameEmpI d DeptNa meHarry 3415 财务 Sally 2241 销售 George 3401 财务 Harriet2202 销售部门 DeptNa me Manager 财务 George 销售 Harrie t 生产Charle s雇员 ⋈ 部门 NameEmpI d DeptNa me ManagerHarry 3415 财务 George Sally 2241 销售 Harriet George 3401 财务 George Harriet2202 销售Harrie t工作因为外键在相同名字的属性之间保持。
如果不是这样,外键成立于从部门.manager到Emp.emp-number,则我们必须在采用自然连接之前必须重命名这些列。
数据库关系代数:是一种抽象的查询语言,用对关系的运算来表达查询。
关系代数运算的是关系,运算结果亦是关系。
关系代数的基本关系包括:并、交、差、笛卡尔积、选择、投影、连接、除法运算。
由于并、交、差运算很简单,这里不再赘述,只说明了几个容易遗忘和混淆的运算。
1、笛卡尔积
计算两个关系R和S的笛卡尔积,R的元数为r,S的元数为s,则R×S是一个(r+s)元的元组集合
2、选择
选择是根据某些条件对关系做水平切割
3、投影π
投影与选择正好相反,是对关系的一种垂直切割,消去某列,并重新安排列的顺序。
投影用(π)表示。
4、连接
连接运算:从两个关系的笛卡尔积中选取属性间满足一定条件的元组,用(R ⋈S)表示,连接分为两种,一种是等值连接(有的书上写的是连接),另一种是自然连接。
等值连接:条件AθB中的θ为‘=’的连接;自然连接:关系R与S选取A、B属性值相等的那些元组。
自然连接:一般自然连接使用在R和S有公共属性时,如果没有公共属性,自然连接就转为笛卡尔积操作。
5、除法
经过总结之后,发现其实关系之间的运算并不难,关键在于要认
真分析,将符号与我们的实际找到联系,只有对各种符号印象深刻之后,这些关系之间的运算也就变得很简单。
在平时要多找联系多总结,方是正道。
•登录关系数据库关系代数之前在学习数据库时接触过关系代数,只是在经过很长一段时间不应用之后,不能很快从大脑中将知识调出来,今天就来了个再次学习总结加深自己的印象。
关系代数:是一种抽象的查询语言,用对关系的运算来表达查询。
关系代数运算的是关系,运算结果亦是关系。
关系代数的基本关系包括:并、交、差、笛卡尔积、选择、投影、连接、除法运算。
由于并、交、差运算很简单,这里不再赘述,只说明了几个容易遗忘和混淆的运算。
1、笛卡尔积计算两个关系R和S的笛卡尔积,R的元数为r,S的元数为s,则R×S是一个(r+s)元的元组集合,如下例所示:结果:由结果分析:笛卡尔积得到的结果元数为r+s即:3+3=6;记录数为:R中的记录数与S中的记录数相乘,即:3×2=6。
2、选择选择是根据某些条件对关系做水平切割,例如δ2 > '4'(R),表示从R中挑选第二个分量值(也就是R中B列的值)大于4的元组所构成关系。
结果:3、投影π投影与选择正好相反,是对关系的一种垂直切割,消去某列,并重新安排列的顺序。
投影用(π)表示。
例如:π3,1(R)表示的结果如下:由结果可以看出:查询表达式中的下标可以用数字表示,也可以用列的名字表示,返回列的名字,而其他的列在结果关系中被去掉,也可以通过投影来重新布局关系的排列。
4、连接连接运算:从两个关系的笛卡尔积中选取属性间满足一定条件的元组,用(R ⋈S)表示,连接分为两种,一种是等值连接(有的书上写的是连接),另一种是自然连接。
等值连接:条件AθB中的θ为‘=’的连接;自然连接:关系R与S选取A、B属性值相等的那些元组。
、4 关系代数关系代数就是一种抽象的查询语言,通过对关系的运算来表达查询。
关系代数的运算对象就是关系,运算结果也就是关系。
系代数运算可以分为四类:1.普通的集合运算: 并、交、差2.删除一部分关系的运算选择运算“σ”会删除某些行投影运算“π”会删除某些列3.合并两个关系的运算“笛卡儿积”运算把两个关系的元组以所有可能的方式组合起来、“连接”运算有选择地从两个关系取出元组组合在一起4.改名运算不改变关系的元组,只改变关系的模式:改变属性的名字或者关系本身的名字一、关系的集合运算三种最普通的集合运算:并、交与差:1、R∪S,R与S的并,它就是R中的元素与S中的元素共同组成的集合。
2、R∩S,R与S的交,它就是既出现在R中又出现在S中的元素组成的集合。
3、R―S,R与S的差,它就是只在R中出现,不在S中出现的元素组成的集合。
要想对两个关系R与S进行上述运算,R与S必须满足如下条件:R与S的模式具有相同的属性集在对R与S进行集合运算之前,要对R与S的属性列进行排序,保证两个关系的属性顺序相同1、并, R∪S ={ r | r∈R ∨ r∈S }关系R:关系SR∪S:2、交, R∩S ={ r | r∈R ∧ r∈S }R∩S:3、差, R-S ={ r | r∈R ∧ r?S }R-S:二、投影运算投影运算符就是π,该运算作用于关系R将产生一个新关系S,S只具有R的某几个属性列。
投影运算的一般表达式如下:S = πA1, A2, … , An(R)S就是投影运算产生的新关系,它只具有R的属性A1, A2, … , An所对应的列。
例:对于关系表:Student投影运算:πStudentNo, StudentName(Student) 结果为:三、选择运算(σ)选择运算符就是σ,该运算符作用于关系R也将产生一个新关系S,S的元组集合就是R的一个满足某条件C的子集。
选择运算的一般表达式为:S = σC(R)S的模式与R的模式完全相同。
关系代数表达式总结-数据库关系代数表达式总结⼀、并例1 求选修了课程号为1或2的课程的学⽣学号。
分析:可以先求出选修了课程号为1的课程的学⽣学号,再求出选修了课程号为2的课程的学⽣学号,最后使⽤并运算的⽅法求出选修课程号为1或2的课程的学⽣学号。
本例也可以使⽤或条件来表⽰。
πSno(σCno=’1’(SC))∪πSno(σCno=’2’(SC)) 或πSno(σCno=’1’∨ Cno=’2’(SC))⼆、交例2 检索⾄少选修课程号为2和3的课程的学⽣学号。
分析:⽅法⼀:只涉及到⼀个表,但不能直接⽤∧(为什么?)特别注意,本例不能写为:πSno(σCno=’2’∧ Cno=’3’(SC))因为选择运算为⾏运算,在同⼀⾏中Cno不可能既为2,⼜为3。
第⼀步:转换(SC×SC)笛卡尔积将垂直的条件展开为⽔平的条件。
SC1 SC2选修课程号为2和3的学⽣:σ1=4∧2=’2’∧ 5=’3’(SC×SC)最后取出学⽣的学号:π1(σ1=4∧2=’2’∧ 5=’3’(SC×SC))⽅法⼆:πSno(σCno=’2’(SC))∩πSno(σCno=’3’(SC))三、差例3 将学⽣信息(‘95001’,’李勇’,‘男’,20,‘CS’)从Student表删除。
分析:可以将这⾏数据看成由⼀个元组构成的表,将Student表与该表进⾏差运算。
因此,该删除操作可表⽰为:Student-{‘95001’,’李勇’,‘男’,20,‘CS’}注意:但是当查询涉及到否定或全部值时,上述形式就不能表达了,就要⽤到差操作或除操作。
例4 求没有选修课程号为2的课程的学⽣学号。
分析:可以认为是在全部学号中去掉选修课程号为2的课程的学⽣学号,就得出没有选修课程号为2的学⽣学号。
由于在并、交、差运算中,参加运算的关系要求是兼容的,故应当先投影,再进⾏差运算。
πSno(Student)- πSno(σCno=’2’(SC))特别注意,本题不能写为:πSno(σCno≠’2’(SC))。
关系代数关系代数是关系数据库系统查询语言的理论基础。
关系代数的9种操作:并、交、差、乘、选择、投影、联接、除、自然联接运算。
五个基本操作:选择(π) 并(∪) 差(-) 笛卡尔积(×)投影(σ) 选择四个组合操作:交(∩) 联接(等值联接)自然联接(RS) 除法(÷) 关系代数表达式:由关系代数运算经有限次复合而成的式子称为关系代数表达式。
这种表达式的运算结果仍然是一个关系。
可以用关系代数表达式表示对数据库的查询和更新操作。
关系代数(演算)要求掌握各种语句的应用,多做书中的例题可以帮助自己熟能生巧。
关系代数表达式举例用关系代数表示数据查询的典型例子[例]设教学数据库中有3个关系:学生关系S(SNO,SNAME,AGE,SEX) 学习关系SC(SNO,CNO,GRADE) 课程关系C(CNO,CNAME,TEACHER) 下面用关系代数表达式表达每个查询语句。
(1) 检索学习课程号为C2的学生学号与成绩。
πSNO,GRADE(σCNO='C2'(SC)) (2) 检索学习课程号为C2的学生学号与姓名πSNO,SNAME(σCNO='C2'(SSC)) 由于这个查询涉及到两个关系S和SC,因此先对这两个关系进行自然连接,同一位学生的有关的信息,然后再执行选择投影操作。
此查询亦可等价地写成:πSNO,SNAME(S)(πSNO(σCNO='C2'(SC)))这个表达式中自然连接的右分量为"学了C2课的学生学号的集合"。
这个表达式比前一个表达式优化,执行起来要省时间,省空间。
(3)检索选修课程名为MATHS的学生学号与姓名。
πSNO,SANME(σCNAME='MATHS'(SSCC)) (4)检索选修课程号为C2或C4的学生学号。
πSNO(σCNO='C2'∨CNO='C4'(SC)) (5)检索至少选修课程号为C2或C4的学生学号。
.4 关系代数关系代数是一种抽象的查询语言,通过对关系的运算来表达查询。
关系代数的运算对象是关系,运算结果也是关系。
系代数运算可以分为四类:1.普通的集合运算:并、交、差2.删除一部分关系的运算选择运算“σ”会删除某些行投影运算“π”会删除某些列3.合并两个关系的运算“笛卡儿积”运算把两个关系的元组以所有可能的方式组合起来.“连接”运算有选择地从两个关系取出元组组合在一起4.改名运算不改变关系的元组,只改变关系的模式:改变属性的名字或者关系本身的名字一、关系的集合运算三种最普通的集合运算:并、交和差:∪S,R和S的并,它是R中的元素和S中的元素共同组成的集合。
∩S,R和S的交,它是既出现在R中又出现在S中的元素组成的集合。
―S,R和S的差,它是只在R中出现,不在S中出现的元素组成的集合。
要想对两个关系R和S进行上述运算,R和S必须满足如下条件:R和S的模式具有相同的属性集在对R和S进行集合运算之前,要对R和S的属性列进行排序,保证两个关系的属性顺序相同1. 并, R∪S ={ r | r∈R ∨ r∈S }R∪S:2. 交, R∩S ={ r | r∈R ∧ r∈S }R∩S:3. 差, R-S ={ r | r∈R ∧ rS }R-S:二、投影运算投影运算符是π,该运算作用于关系R将产生一个新关系S,S只具有R的某几个属性列。
投影运算的一般表达式如下:S = πA1, A2, … , An(R)S是投影运算产生的新关系,它只具有R的属性A1, A2, … , An所对应的列。
例:对于关系表:Student三、选择运算(σ)选择运算符是σ,该运算符作用于关系R也将产生一个新关系S,S的元组集合是R的一个满足某条件C的子集。
选择运算的一般表达式为:S = σC(R)S的模式与R的模式完全相同。
C是我们所熟悉的条件表达式。
可以由AND,OR,NOT等子条件连成的复杂条件。
例:仍然用上面的例子,那么作如下运算:σAge > 18(Student)结果应该是:例:查询计算机系年龄大于18的学生资料,可以用如下表达式:σAge > 18 AND Dept = “计算机系” (Student)结果是:四、笛卡尔积(×)两个关系R和S的笛卡尔积记作R×S,它的关系模式属性是R和S的模式的并集。
因为关系被解释为某个谓词的外延,关系代数的每个运算在谓词演算中都有对应者。
例如,自然连接是逻辑AND()的对应者。
如果关系R和S分别表示谓词p1和p2的外延,则R和S的自然连接(R S)是表示谓词p1p2的外延的关系。
认识到 Codd 的代数事实上关于一阶逻辑不完备是很重要的。
实现它会引起不可R S = {r s| r R, s S}主条目:投影 (关系代数)投影是写为的一元运算,这里的是属性名字的集合。
这种投影的结果定义为当所有在中的元组被限制为集合的时候所获得的集合。
广义选择是写为 的一元运算,这里的 是由正常选择中所允许的原子和逻辑算子 (与)、(或) 和 (非)构成的命题公式。
这种选择选出 中使成立的所有元组。
主条目:重命名 (关系代数) 重命名是写为的一元运算,这里的结果同一于,除了在所有元组中的 字段被重命名为 字段之外。
它被简单的用来重命名关系的属性或关系自身。
连接和类似连接的运算自然连接 (⋈)自然连接是写为 (R ⋈ S ) 的二元运算,这里的 R 和 S 是关系。
[1]自然连接的结果是在 R 和 S 中的在它们的公共属性名字上相等的所有元组的组合。
例如下面是表格“雇员”和“部门”和它们的自然连接:雇员NameEmpI d DeptNa meHarry 3415 财务 Sally 2241 销售 George 3401 财务 Harriet2202 销售部门 DeptNa me Manager 财务 George 销售 Harrie t 生产Charle s雇员 ⋈ 部门 NameEmpI d DeptNa me ManagerHarry 3415 财务 George Sally 2241 销售 Harriet George 3401 财务 George Harriet2202 销售Harrie t工作因为外键在相同名字的属性之间保持。
如果不是这样,外键成立于从部门.manager到Emp.emp-number,则我们必须在采用自然连接之前必须重命名这些列。
这种自然连接有时叫做相等连接(参见θ-连接)。
更形式的说,自然连接的语义定义为:R S = { t s : t R, s S, fun (t s) }这里的 fun(r) 是对于二元关系r为真的谓词,当且仅当r是函数二元关系。
通常要求R和S必须至少有一个公共属性,但是如果省略了这个约束则在那种特殊情况下自然连接就完全变成上面定义的笛卡尔积。
自然连接可以用 Codd 的原始运算模拟如下。
假定b1,...,b m是公共于R和S 的公共属性名字,a1,...,a n是唯一于R的属性名字而c1,...,c k是唯一于S 的属性名字。
进一步假定属性名字d1,...,d m不在R和S二者中。
第一步我们可以重命名S中的公共属性名字: : S' := ρd1/b1(...ρdm/bm( S)...),接着我们采用笛卡尔积并选择要连接的元组: : T:= σb1=d1(...σbm=dm(R×S')...),最后我们采用一个投影来去掉重命名的属性: : U := πa1,...,an,b1,...,bm,c1,...,ck(T) 。
θ-连接和相等连接考虑分别列出车模和船模的价格的表“车”和“船”。
假设一个顾客要购买一个车模和一个船模,但不想为船花费比车更多的钱。
在关系上的θ-连接CarPrice ≥BoatPrice生成所有可能选项的一个表。
车CarMod el CarPri ceCarA 20'000 CarB 30'000 CarC 50'000船BoatModelBoatPriceBoat1 10'000Boat2 40'000Boat3 60'000车船CarModelCarPriceBoatModelBoatPriceCarA 20'000 Boat1 10'000CarB 30'000 Boat1 10'000CarC 50'000 Boat1 10'000CarC 50'000 Boat2 40'000如果我们要组合来自两个关系的元组,而组合条件不是简单的共享属性上的相等,则有一种更一般形式的连接算子才方便,这就是θ-连接(或 theta-连接)。
θ-连接是写为或的二元算子,这里的a和b是属性名字,θ是在集合 {<, ≤, =, >, ≥} 中的二元关系,v是值常量,而R和S是关系。
这个运算的结果由在R和S中满足关系θ的元素的所有组合构成。
只有S和R的表头是不相交的,即不包含公共属性的情况下,θ-连接的结果才是有定义的。
这个运算可以用基本运算模拟如下:RφS = σφ(R×S)在算子θ是等号算子 (=) 的时候这个连接也相等连接。
但是要注意,支持自然连接和重命名的计算机语言可以不需要θ-连接,因为它可以通过对自然连接(在没有公共属性的时候的它退化为笛卡尔积)的选择来完成。
半连接 (⋉)(⋊)半连接是类似于自然连接的写为R⋉S的连接,这里的R和S是关系。
[2]半连接的结果只是在S中有在公共属性名字上相等的元组所有的R中的元组。
例如下面的例子是“雇员”和“部门”和它们的半连接的表:雇员Name EmpIdDeptNameHarry 3415 财务Sally 2241 销售George 3401 财务Harrie t 2202 生产部门DeptNameManager销售Harriet生产Charles雇员⋉部门NameEmpIdDeptNameSally 2241 销售Harriet2202 生产更形式的说半连接的语义定义如下:R S = { t : t R, s S, fun (t s) }这里的 fun(r) 定义同于自然连接。
半连接可以被使用自然连接模拟如下。
假定a1,...,a n是R的属性名字,则:R S =a1,..,an(R S)因为我们可以通过基本运算模拟自然连接因此也就可以模拟半连接。
反连接 (▷)反连接是类似于自然连接的写为R▷S的连接,这里的R和S是关系。
[3]反连接的结果是在S中没有在公共属性名字上相等的元组的R中的那些元组。
例如“雇员”和“部门”和它们的反连接的表:雇员Name EmpIdDeptNameHarry 3415 财务Sally 2241 销售George 3401 财务Harrie t 2202 销售部门DeptNameManager销售Harriet生产Charles雇员▷部门NameEmpIdDeptNameHarry 3415 财务George3401 财务反连接形式定义为:R S = { t : t R s S : fun (t s) }或R S = { t : t R,S中没有s满足 fun (t s) }这里的 fun(r) 定义同于自然连接。
反连接还可以定义为半连接的补集:R S = R - R S为此反连接有时叫做反半连接,反连接算子有时写为其上有横杠的半连接符号。
除法 (÷)除法是写为R÷S的二元关系。
其结果由R中元组到唯一于R的属性名字(就是说只在R表头中而不在S表头中的属性)的限制构成,并且它们与S中的元组的所有组合都存在于R中。
例如下面的“完成”和“DB项目”和它们的除法:完成DB项目完成÷ DB项目Student Task Fred Database1 Fred Database2 Fred Compiler1 Eugene Database1 Eugene Compiler1 Sara Database1 Sara Database2TaskDatabase1Database2StudentFredSara如果“DB项目”包含数据库项目的所有任务,则这个除法的结果精确的包含已经完成了数据库项目的所有学生。
更形式的说除法的语义定义如下:R ÷S = { t[a1,...,an] : t R s S( (t[a1,...,a n] s) R) }这里的 {a1,...,a n} 是唯一于R的属性名字的集合而t[a1,...,a n] 是t到这个集合的限制。
通常要求在S的表头中的属性名字是R的表头的属性名字的子集,否则运算的结果永远为空。
除法可以用基本运算模拟如下。
我们假定a1,...,a n是唯一于R的属性名字而b 1,...,bm是S的属性名字。
在第一步中我们投影R于它的唯一属性上,并接着构造它们与S的元组的所有组合:T := πa1,...,an(R) ×S在上面例子中,T 将是表示所有学生(因为 Student 是“完成”表的唯一键/属性)与所有给定任务的组合的表。
所以 Eugene 在 T 中将有两行 Eugene -> Database1 和 Eugene -> Database2。
在下个步骤中,我们从这个关系中减去R:U := T - R注意在U的都是R中没有出现的可能的组合。
所以如果现在做到唯一于R的属性名字的投影,则我们有了R中元组的限制,它们与S的元组的所有组合未都出现在R中:V := πa1,...,an(U)剩下的就是投影R到唯一于它的属性名字并减去V:W := π(R) - Va1,...,an外连接尽管连接(或内连接)的结果是由组合两个操作数的匹配元组而形成的元组组成,外连接由这些元组加上通过向一个操作数的未匹配元组扩展上另一个操作数的每个属性的“填充”值而形成的元组组成。
本节定义的运算假定“空”值ω的存在性,我们不定义它并把它用做填充值。
不应当假定它为数据库语言SQL所定义的NULL,也不应该假定ω为一个标号而非一个值,也不应该假定它介入了有争议的三值逻辑。
定义三个外连接: 左外连接、右外连接和全外连接。
(有时省略“外”字)左外连接 (⟕)左外连接写成R⟕S,其中R与S为关系。
[4]左外连接的结果包含R中所有元组,对每个元组,若在S中有在公共属性名字上相等的元组,则正常连接,若在S中没有在公共属性名字上相等的元组,则依旧保留此元组,并将对应其他列设为NULL。
右外连接 (⟕)右外连接写成R⟕S,其中R与S为关系。
[5]右外连接的结果包含S中所有元组,对每个元组,若在R中有在公共属性名字上相等的元组,则正常连接,若在R中没有在公共属性名字上相等的元组,则依旧保留此元组,并将对应其他列设为NULL。
全外连接 (⟕)全外连接写成R⟕S,其中R与S为关系。
[6]全外连接的结果包含R与S中所有元组,对每个元组,若在另一关系上中有在公共属性名字上相等的元组,则正常连接,若在另一关系上中没有在公共属性名字上相等的元组,则依旧保留此元组,并将对应其他列设为NULL。