数据库——关系代数知识点+例题

一、传统的集合运算

1、并运算

设关系R和关系S具有相同的目n(即两个关系都有n个属性列),且相应的属性取自同一个域,则关系R和关系S的并由属于R或属于S的元组组成。
记作:R∪S = {t | t ∈ R ∨ t ∈ S}

2、交运算

设关系R和关系S具有相同的目n,且对应的属性取自同一个域,则关系R和关系S的交由既属于R又属于S的元组组成;
记作:R∩S = {t | t ∈ R ∧ t ∈ S}

3、差运算

设关系R和关系S具有相同的目n,且对应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。
记作:R−S = {t | t ∈ R ∧ t ∉ S}

4、广义笛卡尔积

两个分别为n目和m目的关系R和关系S的广义笛卡尔积是一个(n+m)列的元组集合,若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。
记作:R×S = {t | t = < tn, tm> ∧ tn ∈ R ∧ tm ∈ S}

二、专门的关系运算

1、选择运算

选择又称为限制,在关系R中选择满足给定条件的元组。
记作: σ F ( R ) = { t t R F ( t ) = } \sigma_F(R)= \{t|t∈R ∧ F(t)='真' \}

例:查询年龄小于20岁的学生:σSage<20(Student)

2、投影运算

关系R上的投影是从R中选择出若干属性列组成新的关系。
记作: π A ( R ) = { t [ A ] t R } \pi_A(R)= \{t[A] | t ∈ R\}
【注意】投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列之后,就可能出现重复行,应取消这些完全相同的行。

例:查询学生关系Student在学生姓名和院系属性上的投影:πSname,Sdept(Student)

3、连接运算

连接也称为θ连接,从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
记作: R S = { t r t s t r R t s S t r [ A ] θ t s [ B ] } R∞S=\{t_rt_s|t_r∈R∧t_s∈S∧t_r[A] θ t_s[B]\}
其中A和B分别为R和S上度数相等且可比的属性组。

①等值连接

从关系R与关系S的笛卡尔积中选取A、B属性值相等的那些元组。
记作: R S = { t r t s t r R t s S t r [ A ] = t s [ B ] } R∞S=\{t_rt_s|t_r∈R∧t_s∈S∧t_r[A]=t_s[B]\}

②自然连接

自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。
若R和S具有相同的属性组B,U为R和S全体属性集合,则自然连接可记作: R S = { t r t s [ U B ] t r R t s S t r [ A ] = t s [ B ] } R∞S=\{t_rt_s[U-B]|t_r∈R∧t_s∈S∧t_r[A]=t_s[B]\}

例:查询选课的学生信息和成绩:Student ∞ SC

③外连接

a.悬浮元祖:把两个关系在做自然连接时舍弃的元组
b.外连接:如果把悬浮元祖也保存在R和S自然连接(R∞S)的结果关系中,而在其他属性上填空值,则这种连接就叫做外连接。
【注意】若只保留左边关系R中的悬浮元组称为左外连接,若只保留右边关系R中的悬浮元组称为右外连接。

4、除运算

给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组,R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R和S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。
记作: R ÷ S = { t r [ X ] t r R π y ( S ) Y x } R÷S=\{t_r[X]|t_r∈R∧π_y(S)⊆Y_x\}

例:查询至少选修1号和3号课程的学生号码:
K = πCnoσCno='1'∨Cno='3'(C)  --建立一个临时关系K包含1、3课程号
πSno,Cno(SC)÷K  --至少选修1和3号课程的学号

总结

选择:用于对关系中的元组(行)选择检索查询
投影:用于对关系中的属性(列)的查询
连接:用于多个关系之间的连接
除:解决有包含关系的查询

关系代数相关示例

设有学生-课程关系数据库,它由三个关系组成,它们的模式是:
学生S(学号SNO,姓名SN,所在系DEPT,年龄AGE)、
课程C(课程号CNO,课程名CN,先修课号CPNO)、
SC(学号SNO,课程号CNO,成绩SCORE)。

请用关系代数分别写出下列查询:

(1) 检索学生的所有情况:S
(2) 检索学生年龄大于等于20岁的学生姓名:πSN(σAGE≥20(S))
(3) 检索先修课号为C2的课程号:πCNO(σCPNO=’C2’(C))
(4) 检索选修了课程号C1成绩为A的所有学生姓名:πSN(σCNO=’C1’ ∧SCORE=’A’(SC) ∞S)
(5) 检索学号为S1的学生修读的所有课程名及先修课号:πCN,CPNO(σSNO=’S1’(SC) ∞C)
(6) 检索年龄为23岁的学生所修读的课程名:πCN(σAGE=23(S) ∞SC∞C)
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名:πSN(S∞SC∞πCNO(σSNO=’S5’(SC)))
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名:πSN(S∞(πSNO,CNO (SC) ÷πCNO(σSNO=’S4’(SC))))
(9) 检索选修所有课程的学生的学号:πSNO,CNO (SC) ÷πCNO(C)
(10) 检索不选修任何课程的学生的学号:πSNO(S)−πSNO(SC)
发布了20 篇原创文章 · 获赞 16 · 访问量 1281

猜你喜欢

转载自blog.csdn.net/SAMSARS/article/details/105422215
今日推荐