关系代数运算

关系代数用对关系的运算来表达查询,运算对象是关系,结果得到关系

关系可以明白为一张二维表,比方一张学生表,就是一个关系,关系代数运算就是我们写sql的一些查询操作,操作表天生新的表要么视图

关系代数的运算有两种:

  • 运算符为传统的聚集运算符:并、差、交、笛卡尔积
  • 运算符为专门的关系运算符:选择、投影、连接、除

传统的聚集运算符 :从表的行的角度进行运算,以是需要运算的关系R、S具有相同的属性列的种类、属性列数量

专门的关系运算符 :涉及到列、行,没有那些限定

其他: 选择、投影、并、差、笛卡尔积 是查询操作的基本操作,其他操作可以由这5种基本操作推出

关于这些操作的观点是很艰涩的,联合详细的SQL来明白


并(union)

并操作两个关系R、S,得到的关系由属于R或S的元组构成,就是逻辑并

对应的Sql操作就是 Union
第一次查询的id=1的关系 第二次查询id=2的关系 的结果:

在这里插入图片描述

and 的结果也是这样的,为什么不说and呢?

这里重要谈的是并的头脑,两个关系的并运算,and的话并不是两个关系的运算


差(except)

差:关系R与关系S的差由属于R而不属于S的全部元组构成

很显着,完成差的查询操作只需要从R中清除R与S交集关系即可,用 not in 重要字sql查询

在这里插入图片描述

实际上存在 except 重要字,Mysql不支持

换成Sql Server试试:

select * from 学生 where 学号 < 3 except select * from 学生 where 学号 = 1 ;

但是没须要记这么多重要字,理解头脑就行


笛卡尔积(cartesian product)

m个属性的关系R与n个属性的关系S,笛卡尔积为(m+n)列的元组的聚集,行数为(m*n)
在这里插入图片描述

我们常用的没有限定的表连接就是笛卡尔积

在这里插入图片描述

选择(Selection)

选择又称为限定,在关系R中选择满意给定条件的元组, 也就是筛选行

在这里插入图片描述

sql语句对应的就是我们的 where 重要字


投影(projection)

投影:关系R上的投影是从R中选择出多少属性列构成新的关系
这不就是select语句吗?从表R中选择一些属性构成新的关系

下面得到的结果就是一个新的关系


小结

五种基本操作:并、差、笛卡尔积、选择、投影 就是这么简单

相关的观点很艰涩但是完备,我们学习时需要普通

由这5个基本查询操作,可以构成庞杂的关系运算,比方连接


连接(join)

连接:从两个关系的笛卡尔积中选取属性间满意肯定条件的元组

连接可以分为:

  • 内连接:两个关系R、S的笛卡尔积限定了一些条件,扬弃R、S中公共属性值不存在相称的元组; 等值连接、非等值连接
  • 外连接:没有扬弃R、S中公共属性值不存在相称的元组; 左外连接、右外连接、全连接
  • 交织连接(笛卡尔积)

内外连接的区别在与那些 被舍弃的元组 是否保存到了结果中,通事后面的sql来明白

teacher、student表:

在这里插入图片描述

内连接

  • 等值连接
    select * from student,teacher where student.id = teacher.tid;
  • 仅取出 student.id = teacher.tid 的元组

  • 非等值连接,也就是不是等号,而是>、<这些标记
    select * from student,teacher where student.id > teacher.tid;
  • 在这里插入图片描述
  • 内连接不加限定就是交织连接了,也就是笛卡尔积
  • 外连接 :R、S中舍弃的元组也保存到结果中,而在其他属性上填空值

  • 左外连接:只保存左边关系R的舍弃的元组
    select * from student left join teacher on student.id = teacher.tid;
  • 右外连接:只保存右边关系S的舍弃的元组,由于我们teacher表比student表少,以是互换一下位置
  • select * from teacher right join student on student . id = teacher . tid ;
  • 全连接:左右两表中的舍弃的元组都保存
    MySQL不支持full join重要字,但可以通过左连接 union 右连接实现
  • Sql Server:
    select * from 学期成绩 R full join 课程注册 S on R.课程编号 = S.课程编号;

    这两个表是这样的:

    可以得到查询结果:

    Mysql通过左连接 union 右连接就不实现了

    投影运算与选择运算

    减小字体 增大字体

    作者:佚名 出处:本站整理 公布时间:2017-04-24 14:41:31

    关系代数中专门的关系运算包括选择、投影、连接和除。本文重要介绍一下投影运算。

    在上一篇文章中( 关系运算:选择 ),我们探究了选择运算,选择运算是从关系中选择满意条件的那些行(元组或记载),而投影运算是从关系中选择指定的列,是从列的角度进行的运算。

    (1)投影的含义

    从关系R中选择出多少属性列构成新的关系。

    π A ( R ) = { t [ A ] | t Î R }

    此中,A为关系R中的属性列

    (2)投影运算后不但从关系中选择指定的属性列,也大概取消某些元组(重复的元组)

    (3)举例1:从下图所示的Student关系中查询学号和姓名。

    关系运算之投影运算

    关系代数表现为:

    π sno,sname ( Student )

    结果如下:

    投影运算结果包含两列且没有重复的元组

    举例2:从关系Student中查询院系信息。其结果如下:

    关系代数为:

    π sdept ( Student )

    由下图可以看出由于去掉了一些属性,造成新关系中存在重复的元组,去掉重复的元组后结果如下:

    关系运算之投影运算结果去掉了重复的元组

    由于一些历史缘故,关系代数中的选择和 SQL 中的 SELECT 不是一个意思,而是更靠近 WHERE , 我们可以通过选择运算选择关系中切合指定条件的部分。

    好比说 \(\sigma_{id=1}(user)\) 可以选择关系 User id 即是 1 的用户,其等价的 SQL 语句如下:

    SELECT * FROMuserWHERE id = 1; 

    选择运算中可以使用的谓词包括: \(=, \neq, , \geqslant\). 同时还可以使用连词 \(and(\land), or(\lor), n!ot(\lnot)\) 将多个谓词归并为一个较大的连词。

    好比说 \(\sigma_{id \geqslant 1 \land id < 3}\) 选择 id 范畴在 [1, 3) 之间的用户,等价于:

    SELECT * FROMuserWHERE id >= 1 AND id < 3; 

    同时,由于关系运算的结果依然是一个关系,因此,我们可以将关系运算组合起来,好比:选择 id 为一的用户的 account 可以表现为 \(\prod_{account}(\sigma_{id=1}(user))\)

    本文网址: http://www.appike.com/d/202141211115_1429_3522125079/home