Unary Operations(一元操作): 单表操作
- 选择(Selection) ==>相当于SQL语句中的WHERE
语法:
举例:
表示从Students这个表中选出course = 'CM'的信息,结果为:
等价于下面的SQL语句:
SELECT * FROM Students WHERE course = 'CM';
- 投影(Projection) ==>相当于SQL语句中的SELECT
语法:
举例:
表示从Students这个表中选出student# 和name的信息,结果为:
等价于下面的SQL语句:
SELECT student#, name FROM Students;
- 选择和投影的结合==>相当于SQL语句中的SELECT和WHERE的结合
语法:
举例:
表示从Students这个表中选出student# 和name这几个columns,使得course = 'CM' ,结果为
等价于下面的SQL语句:
SELECT student#, name FROM Students WHERE course = 'CM';
- 重命名(Rename) ==>相当于SQL语句中的AS子句的职能
语法:
ρ(A,B) 表示将B更名为A
Binary Operations(二元操作):不同结构的两表操作
- 笛卡尔乘积(Cartesian Product)==>等价于SQL语句中两个表进行笛卡尔积(全匹配)得到的结果,即SQL中进行多表连接时不指定连接条件的情况
语法:
表名R X 表名S
举例:
表示表格Students中的每一个row都要concatenation表格Courses中的每一个row, 结果为:
等价于下面的SQL语句:
SELECT * FROM Students, Courses;
- Theta连接(Theta Join)==>是带限定条件的笛卡尔乘积
语法:
举例:
表示表格Students中的每一个row都要concatenation表格Courses中的每一个row,且student# = 200。结果为:
等价于下面的SQL语句:
SELECT * FROM Students, Courses WHERE student# = 200;
- 内部连接Inner Join (Equijoin)==>是带限定条件(其限定条件是R表格的primary_key = S表格的oreign_key)的笛卡尔乘积
语法:
举例:
表示表格Students中的每一个row都要concatenation表格Courses中的每一个row,且Student.course = Courses.course#。结果为:
等价于下面的SQL语句:
Select * From Students, Courses Where course=course#;
- 自然连接(Natural Join)==>去重之后的内部连接(Inner Join); 相当于SQL语句中的NATURAL JOIN
显然,上述内部连接Inner Join之后的表格有冗余:
语法:
R1先得出Inner Join结果
R2选出R1去重后留下的columns: student#, Students.name, course, Courses.name
等价于下面的SQL语句:
Select student#, Students.name, course, Courses.name From Students, Courses Where course=course#;
小结: 由此可以看出笛卡尔乘积(Cartesian Product)-> Theta连接(Theta Join) -> 内部连接Inner Join (Equijoin)->自然连接(Natural Join) 范围在逐步逐步的缩小。
- 外部连接(Outer Join)==> 相对于内部连接Inner Join 只生成匹配的行,外部连接允许输出并不完全匹配的行
- 左外连接(Left Outer Join)==>表示左边表的全部行输出,右边只输出匹配行
语法:
左外连:⟕
举例:
表示Students左外连接Courses,其中Student.course = Courses.course#。 结果为:
等价于下面的SQL语句:
Select * From Students, Courses Where course = course#(+)
- 右外连接(Right Outer Join)==>表示右边表的全部行输出,左边只输出匹配行
语法:
右外连:⟖
举例:
表示Students右外连接Courses,其中Student.course = Courses.course#。 结果为:
等价于下面的SQL语句:
Select * From Students, Courses Where course(+) = course#
Set Operations(集合操作):相同结构的两表操作
- 并集(Union) ==>相当于SQL中UNION关键字的职能
语法:
举例:
R ∪ S 得到结果是:
- 交集(Intersection) ==>相当于SQL语句中INTERSECT职能
语法:
举例:
R ∩ S 得到结果是:
- 差集(Difference) ==>相当于SQL语句中的EXCEPT
语法:
举例:
R - S 得到结果是:
规定R - S, 输出第一个表格的row(s) !!!
练习: