当前位置:   article > 正文

数据库原理(关系代数)_关系代数查询

关系代数查询

1.集合运算符基础

要求:

  • 具有相同的目n(即两个关系都有n 个属性)
  • 相应的属性取自同一个域
  • t是元组变量, t \inR表示t是R的一个元组

1.1并

符号(\cup

R∪S = { t|t \in R∨t \inS }

结果特征:

  • 仍为n 目关系,由属于R 或属于S 的元组组成
  • 一个元组在并集中只出现一次,运算结果须消除重复值

例如:

1.2差

符号(-)

R-S={t| t \in R \wedge t \notin S}

结果特征:

  • 仍然为n目关系,由输入R但不属于S的元组组成

1.3笛卡尔积

符号(\times

R×S = {\overbrace{t_{r}t_{s}} |t_{r}\in R \wedge t_{s}\in S }

1.3.1过程

  • R: n目关系,k1个元组
  • S: m目关系,k2个元组

R×S运算结果也是一个关系:

列:(n+m)列元组的集合量(R x S是n+m度关系)

  • 元组的前n列是关系R的一个元组
  • 后m列是关系S的一个元组

行:k1×k2个元组( R×S的基数)

例如:

2.专门的关系运算

2.1表示记号

2.2选择(Selection)

符号(\sigma

\sigma_{F}\left ( R \right )={t | t \in R \wedge F(t)='true')}

  • F:选择条件,是一个逻辑表达式
  • 选择运算是从行的角度进行的运算

2.2.1例题

查询信息系(IS系)全体学生:

\sigma _{Sdept ="IS"}(Student)

结果:

2.3投影(Projection)

符号(\pi

\pi_{A}(R)=\left \{ t[A] | t\in R \right \}

  • A:R 中的属性列
  • 投影操作主要是从列的角度进行运算
  • 但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

2.3.1例题

1.查询学生的姓名和所在系。 即求Student关系上学生姓名和 所在系两个属性上的投影。

\pi_{Sname,Sdept}\left ( R \right )

结果:

2.查询学生关系Student中都有哪些系

\pi_{Sdept}\left ( R \right )

结果:(注意,此时自动要消除重复的元组)

2.4连接(Join)

符号(\Join

2.4.1连接也称为θ连接

  • 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
  • 其本质是笛卡尔积的子集

2.4.2等值连接(equijoin)

  • θ为“ = ”的连接运算称为等值连接

2.4.3自然连接(Natural join)

  • 两个关系中进行比较的分量必须是相同的属性组
  • 在结果中把重复的属性列去掉

2.4.4例题

R
ABC
a1b15
a1b26
a2b38
a2b412
S
BE
b13
b27
b310
b32
b52

等值连接:

自然连接:

2.5除(Division)

2.5.1象集

给定一个关系R(X,Z),X和Z为属性组。当t [X]=x时,x在R中 的象集(Images Set)为:

它表示R中属性组X上值为x的诸元组在Z上分量的集合。

注意:可以这样理解,把A看成X可取值a1,a2。B看成Y,有关系Y=F(X),当X取a1时,自变量Y(B)可以取b1,b2。

象集的本质是一次选择运算一次投影运算

2.5.2除

  • 给定关系R (XY) 和S (YZ),其中X,Y,Z为属性组。
  • R中的Y与S中的Y可以不同的属性名,但必须出自相同的域集
  • R与S的除运算得到一个新的关系P(X),P 是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Y_{x}包含S在Y上投影的集合。

例如:

为了方便理解,我做以下解释:

除操作比较抽象,我们可以把它理解为一种筛选,这中筛选包括“至少”、“全部”。

也可以把它类比成数学中的除法:“被除数 \div 除数 = 结果”,其中先寻找1、要根据什么内容(记为A1)筛选,如上面的例子根据(B、C)来筛选,2、再寻找在哪里面筛选(筛选什么?)(记为A2),上面是在R中筛选。3、如何筛选(记为\div),筛选A属性中对应的B、C包括全部的S中B、C属性的A属性。上面可以表示为A2 \div A1=?。

2.5.3例题

(关系都在2.2.1例题)

(一)查询至少选修1号课程和3号课程的学生号码

分析:

           1、要根据什么内容筛选?——根据课程号(1号、3号)筛选

           2、筛选什么?——筛选学生学号(在关系Student中)

           3、如何筛选?——找到 关系(学号,课程号)\div 关系(课程号={1、3})

step1:首先建立一个临时关系K(K={1,3})

step2:再求:\pi_{Sno,Con}\left ( SC \right )     (注意:因为只要学号,所以可以进行投影除学号(Sno)和课程号(Cno)这两个属性)

step3:\pi_{Sno,Con}\left ( SC \right )\div K

(二) 查询选修了2号课程的学生的学号

这个比较简单,可以直接用选择和投影。

\pi_{Sno}\left ( \pi_{Cno=2}\left ( SC \right ) \right )

  (三)   查询至少选修了一门其直接先行课为5号课程的学生姓名

这里需要注意的是,学生姓名和先行课课号没有直接联系

分析:

  • 1、要根据什么内容筛选?——根据先行课(5号)筛选
  • 2、筛选什么?——筛选学生姓名(在关系Student中)
  • 3、如何筛选?——找到 关系(学号,课程号,先行课)\div 关系(先行课=5),接下来再连接、投影出学生姓名。

但是需要注意的是如何构建    关系(学号,课程号,先行课)   和关系(先行课=5)

step1:首先将Course和SC进行自然连接得到  关系(学号,课程号,成绩,课程名,先行课,学分),再将其投影成 关系(学号,课程号,先行课)

step2:选择Course中先选择 关系(先行课=5)

step3:关系(学号,课程号,先行课)\div 关系(先行课=5),再投影出学号,将学号与Student自然连接,接着投影出姓名。

解二:

\pi_{Sname}(\sigma _{Spno=5} (Course) \Join SC) \Join \pi_{Sno,Sname} (Student))

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号