sigma(σ)
来表示选择,而将谓词写作sigma的下标。参数关系在sigma后的括号中。=
,≠
,<
,≤
等。另外,我们可以用连词将多个谓词合并成一个较大的谓词pi
表示,列举所以我们希望在结果中出现的属性作为pi
的下标,作为参数的关系在跟随pi
后的括号中r∪s
有意义,我们要求以下两个条件同时成立
r
和s
必须是同元的,即它们的属性数目必须相同i
,r
的第i
个属性的域必须和s
的第i
个属性的域相同域:属性的取值范围;r和s可以是数据库关系或者作为关系代数表达式结果的临时关系
r - s
有意义,我们同样要求以下两个条件同时成立
r
和s
必须是同元的,即它们的属性数目必须相同i
,r
的第i
个属性的域必须和s
的第i
个属性的域相同r - s
的结果即一个包含所有在r
中而不在s
中的元组的关系r n s
有意义,我们同样要求以下两个条件同时成立
r
和s
必须是同元的,即它们的属性数目必须相同i
,r
的第i
个属性的域必须和s
的第i
个属性的域相同r n s=r - (r-s)
×
表示的笛卡尔积运算使得我们可以将任意两个关系的信息组合在一起。关系定义为一组域上的笛卡尔积的子集。
r1×r2
的模式是R1和R2串接而成的。关系R中包含所有满足以下条件的元组t:r1中存在元组t1且r2中存在元组t2,使得t[R1]=t1[R1]且t[R2]=t2[R2]
teaches.id=22222
的课程才是Einstein物理老师教授的课程,剩下的课程是因为teaches关系串接而出现的,并不符合连接后对表的需求(instructor.id和teaches.id没有一一对应),因此我们用下面的表达式来纠正这个instructor.id和teaches.id不对应的问题ρ
表示更名运算。对于给定关系代数表达式E
,表达式 ρ x ( E ) ρ_x(E) ρx(E) 返回表达式E
的结果,并把名字x
赋给了它
查询“找出大学里的最高工资”
思路:最高工资 = 所有工资 - 除最高工资以外的工资
instructor×instructor
,区别好两个关系中的salary属性用于比较(为了无歧义的引用两次该属性,对第二个instructor关系使用更名运算,将其更名为关系d),然后比较这个笛卡尔积中两组salary属性值,选出除最高工资以外的工资(其原理是只要关系d中有salary比instructor大即可,是一个存在的全称量词——即存在salary属于d,大于salary属于instructor即可)自然连接自动连接所有同名列,但如果两个关系没有同名列,就进行笛卡尔运算
←
表示,与程序语言中的赋值类似。使用赋值运算,我们可以把查询表达为一个顺序程序。扩展笔记——第四章:中级SQL,指路外连接,外连接的具体功能规则即sql规则,外连接运算可以用基本关系代数运算表示
外连接运算是连接运算的拓展,可以处理缺失的信息。一般地,参加连接的一个或两个关系中的某些元组可能因存在空值而“丢失”。外连接运算与自然连接运算相似,不同之处在于它在结果中创建带空值的元组,以此来保留在连接中丢失的那些元组。
可以用来对值的集合使用聚集函数。
sum:求和
&avg求平均
&count计数
&min/max求最小值最大值
使用聚集函数对其进行操作的汇集中,一个值可以出现多次,值出现的顺序是无关紧要的,这样的汇集是多重集。集合是多重集的特例。
除运算讲解补充优质博客
元组关系演算是非过程化的查询语言。它只描述所需信息,而不给出获得该信息的具体过程。元组关系演算中的查询表达式为{t|P(t)}
它是所有使谓词P为真的元组t的集合
和前面的记法一样,我们用 t[A]
表示元组t在属性A上的值,并用t∈r
表示元组t在关系r中
∃ t∈r(Q(t))
表示关系r中存在元组t使谓词Q(t)为真。
常用于“假设我们只需要ID属性,而不是关系instructor的所有属性”这类要求
∀ t∈r(Q(t))
表示对关系r中的所有元组t,Q均为真
表达式解读
- 它是所有满足如下条件的元组t的集合:在关系instructor中存在元组s使t和s在属性ID上值相等,且s在属性salary上的值大于80000美元。
- 元组t只定义在ID属性上(相当于投影)
表达式解读
- 选择运算不用量词
- 投影运算用存在量词,属性名对应t,元组值对应存在量词后的字母
- 并、差、选择不用量词,投影、笛卡尔积用量词表示
- 量词是扫描一遍的意义,量词变量如同指针,依次定位在表中的各个元组上
和元组关系演算同理