[数据库笔记]关系代数(Relational Algebra)

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) !!!

练习:

  

原文地址:https://www.cnblogs.com/liuliu5151/p/10952981.html