形式化语言:关系代数、元组关系演算和域关系演算

1. 关系代数

基本:选择,投影,并,集合差,笛卡尔积和更名

其他:集合交,自然连接和赋值

1.1 基本运算

一元运算:选择、投影、更名

二元运算:并、集合差、笛卡尔积

1.1.1 选择运算(select)

σdept_name="Physics" ∩ salary>90000(instructor)  在instructor关系中找出dept_name属性为"Physics"且salary属性大于90000的所有元组

σdept_name=building(instructor)  在instructor关系中找出dept_name属性和building属性相同的所有元组

注:关系代数中的选择与SQL中的select具有不一样的含义,应对应于SQL中的where

1.1.2 投影运算(project)

返回作为参数的关系,但把某些属性排除在外。

πID, name, salary(instructor)  显示查询了instructor关系中的ID,name,和salary三个属性的关系。

1.1.3 关系运算的组合

πnamedept_name="Physics"(instructor))  找出物理系中所有教师的名字

1.1.4 并运算

找出开设在2009年秋季或者2010年春季学期或者这两者皆开的所有课程的集合

1.1.5 集合差

找出所有开设在2009年秋季学期但是在2010年春季学期不开的课程

1.1.6 笛卡尔积运算

将任意的两个关系的信息组合在一起

1.1.7 更名运算

ρx(E)  将名字x赋给E

 

已知instructor关系中存在salary属性,找出salary的最大值:

1. 找出不是salary属性不是最大值的所有元组构成的关系

πinstructor.salaryinstructor.salary<d.salary(instructor×ρd(instructor)))

2. 求集合差来获得salary的最大值

πsalary(instructor) - πinstructor.salaryinstructor.salary<d.salary(instructor×ρd(instructor)))

1.2 关系代数的形式化定义

1.3 附加的关系代数运算

1.3.1 集合交运算

找出在2009年秋季和2010年春季都开设的课程

1.3.2 自然连接运算

 

 1.3.3 赋值运算

1.3.4 外连接运算

左外连接:取出左侧关系中所有与右侧关系的任一元组都不匹配的元组,用空值填充所有来自右侧关系的属性

右外连接:用空值填充来自右侧关系的所有与左侧关系的任一元组都不匹配的元组,将结果加到自然连接的结果中

全外连接:即做左外连接又做右外连接