[数据库笔记]关系代数(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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值