关系数据库之关系代数

数据库 专栏收录该内容
14 篇文章 1 订阅

关系数据库的关系代数运算符有8种,分为两大类,如下表所示:

分类运算符含义
传统关系运算符 ∪ ∪
− −
∩ ∩
× × ×笛卡尔积
专用关系运算符σ选择
投影
连接
÷

1 传统的关系运算

传统的集合运算是二元运算,包括并、差、交、笛卡尔积4种运算。设有两关系R、S。

1.1 并 union

关系R与关系S的并记作: R ∪ S = { t   ∣   t ∈ R ∨ t ∈ S } R\cup S=\{t\ |\ t\in R \lor t\in S\} RS={t  tRtS}合并R和S所有元组

1.2 交 intersection

关系R与关系S的交记作: R ∩ S = { t   ∣   t ∈ R ∧ t ∈ S } R\cap S=\{t\ |\ t\in R \land t\in S\} RS={t  tRtS}关系的交也可用差来表示: R ∩ S = R − ( R − S ) R\cap S=R-(R-S) RS=R(RS)取出R与S中共有的元组

1.3 差 except

关系R与关系S的差记作: R − S = { t   ∣   t ∈ R ∧ t ∉ S } R- S=\{t\ |\ t\in R \land t\notin S\} RS={t  tRt/S}去掉R中属于S的元素

1.4 笛卡尔积 cartesian product

关系R与关系S的并记作: R × S = { t R t S ⌢   ∣   t R ∈ R ∧ t S ∈ S } R\times S=\{\overset{\large\frown}{t_Rt_S}\ |\ t_R\in R \land t_S\in S\} R×S={tRtS  tRRtSS}这里的笛卡尔积指的是广义笛卡尔积,对元组进行笛卡尔积有点类似于小学数学课上学过的握手游戏。

对于 R × S R\times S R×S来说,表示每个R中的元组都要与S中的元组连接一次
在这里插入图片描述

1.5 传统关系运算举例

R R R:

colorpatternsize
A5
B10
B5

S S S:

colorpatternsize
B10
C10
B5

则有:

  • R R R S S S的并 R ∪ S R\cup S RS:
colorpatternsize
A5
B10
B5
C10
  • R R R S S S的交 R ∩ S R\cap S RS:
colorpatternsize
B10
B5
  • R R R S S S的差 R − S R- S RS:
colorpatternsize
A5
  • R R R S S S的笛卡尔积 R × S R\times S R×S
R.colorR.patternR.sizeS.colorS.patternS.size
A5B10
A5C10
A5B5
B10B10
B10C10
B10B5
B5B10
B5C10
B5B5

2 专用的关系运算

专用的关系运算符包括选择、投影、连接、除运算

在具体介绍运算符之前为了方便表达,先引入几个符号:

  • R R R:关系。 R = { r 1 , r 2 , . . . , r n } R=\{r_1,r_2,...,r_n\} R={r1,r2,...,rn},其中 r i r_i ri表示 R R R中的列。类似的, S S S等符号也代表一个关系
  • t t t:元组。 t t t代表 R R R的某一行,称 t t t为元组。
  • t [ r i ] t[r_i] t[ri]:分量。 t [ r i ] t[r_i] t[ri]表示 t t t行中 r i r_i ri列的值,称 t [ r i ] t[r_i] t[ri]为分量。
  • Z t [ r i ] Z_{t[r_i]} Zt[ri]:象集。 Z t [ r i ] Z_{t[r_i]} Zt[ri]表示 t t t行中除 r i r_i ri列外其他列的值,称 Z t [ r i ] Z_{t[r_i]} Zt[ri]为象集。
  • θ \theta θ:比较运算符。比较运算符有6种,分别是 = = = > > > ≥ \geq < < < ≤ \leq < > <> <>
2.1 选择 selection

选择关系运算记作: σ r i θ t [ r i ] ( R ) = {   t   ∣   t ∈ R ∧ r i θ t [ r i ] = t r u e } \sigma_{r_i\theta t[r_i]}(R)=\{\ t\ |\ t\in R\land r_i\theta t[r_i]=true\} σriθt[ri](R)={ t  tRriθt[ri]=true}即取出 R R R表中 r i r_i ri列的值与 t [ r i ] t[r_i] t[ri]具有 θ \theta θ关系的行
例如:
σ S a g e < 20 ( S t u d e n t ) \sigma_{Sage<20}(Student) σSage<20(Student)表示取出 S t u d e n t Student Student表中 S a g e Sage Sage列值小于数值20的行
σ S n a m e = ′ 李 勇 ′ ( S t u d e n t ) \sigma_{Sname='李勇'}(Student) σSname=(Student)表示取出 S t u d e n t Student Student表中 S n a m e Sname Sname列值等于字符串李勇的行

2.2 投影 projection

投影关系运算记作: ∏   r i ( R ) = { t [ r i ]   ∣   t ∈ R } \prod\ _{r_i}(R)=\{t[r_i]\ |\ t\in R\}  ri(R)={t[ri]  tR}即取出 R R R表中的 r i r_i ri
例如:
∏   S a g e ( S t u d e n t ) \prod\ _{Sage}(Student)  Sage(Student)表示从表 S t u d e n t Student Student取出 S a g e Sage Sage列形成新的关系
∏   S a g e , S n a m e ( S t u d e n t ) \prod\ _{Sage,Sname}(Student)  Sage,Sname(Student)表示从表 S t u d e n t Student Student取出 S a g e Sage Sage S n a m e Sname Sname列形成新的关系

2.3 连接 join

连接关系运算记作: r i θ r j R ⋈ S = { t R t S   ∣ t R ∈ R ∧ t S ∈ R ∧ t R [ r i ] θ t S [ r j ]   ⌢ } \overset{R\Join S}{_{r_{i}\theta r_{j}}}=\{\overset{\large\frown}{t_Rt_S\ |t_R\in R \land t_S\in R\land t_R[r_i]\theta t_S[r_j]\ }\} riθrjRS={tRtS tRRtSRtR[ri]θtS[rj] }即选取 R R R S S S的笛卡尔积中 t R [ r i ] t_R[r_i] tR[ri] t S [ r j ] t_S[r_j] tS[rj]满足关系 θ \theta θ的行

连接有四种特殊形式:

  • 非等值连接。就是指 θ \theta θ不为等号的连接,例如 r i < r j R ⋈ S \overset{R\Join S}{_{r_{i}< r_{j}}} ri<rjRS表示连接满足 R . r i < S . r j R.r_i<S.r_j R.ri<S.rj关系的 R R R S S S中的元组
  • 等值连接。就是指 θ \theta θ为等号的连接,例如 r i = r j R ⋈ S \overset{R\Join S}{_{r_{i}=r_{j}}} ri=rjRS表示连接满足 R . r i = S . r j R.r_i=S.r_j R.ri=S.rj关系的 R R R S S S中的元组
  • 自然连接。自然连接是一种特殊的等值连接,就是 r i r_i ri r j r_j rj的属性名一致且值相等的等值连接,并在连接结果中去掉重复列,而在一般的等值连接中只需要满足 r i r_i ri r j r_j rj的值相等即可,记作 R ⋈ S R\Join S RS
  • 外连接。外连接是一种特殊的自然连接,在自然连接的过程中,若连接后元组里的某个属性出现Null值就会舍去该元组,而外连接则会保留该元组。外连接分为三种:
  • 1、外连接。保留两边关系自然连接后出现Null值属性的元组,记作 R : ⋈ : S R:\Join: S R::S
  • 2、左外连接。保留左边关系自然连接后出现Null值属性的元组,记作 R : ⋈ S R:\Join S R:S
  • 3、右外连接。保留右边关系自然连接后出现Null值属性的元组,记作 R ⋈ : S R\Join: S R:S
2.4 除 division

除关系运算记作: R ÷ S = {   t R [ r i ]   ∣   t R ∈ R ∧ ∏   r j ( S ) ⊆ r j   t R [ r i ]   } R\div S=\{\ t_R[r_i]\ |\ t_R\in R\land\prod\ _{r_j}(S)\subseteq r_{j\ t_R[r_i]}\ \} R÷S={ tR[ri]  tRR rj(S)rj tR[ri] }即取出 R R R中使 R . r j R.r_j R.rj完全等于 S . r j S.r_j S.rj R . r i R.r_i R.ri元组
例如:
∏   S n a m e , S a g e ( R ) ÷ ∏   S a g e S \prod\ _{Sname,Sage}(R)\div \prod\ _{Sage}S  Sname,Sage(R)÷ SageS表示取 R R R投影中使 R . S a g e R.Sage R.Sage完全等于 S . a g e S.age S.age R . n a m e R.name R.name元组,形成新的关系

2.5 专用关系运算举例

R R R:

colorpatternsize
A5
B6
C8
D12

S S S:

patternweight
A3
B7
C10
C2
E2
  • R R R的选择, σ c o l o r = ′ 红 ′ ( R ) \sigma_{color='红'}(R) σcolor=(R),取出 R R R表中 c o l o r color color列值为字符串’红’的行形成新的关系:
colorpatternsize
A5
B6
  • R R R的投影, ∏   c o l o r , s i z e ( R ) \prod\ _{color,size}(R)  color,size(R),从表 R R R取出 c o l o r , s i z e color,size color,size列形成新的关系:
colorsize
5
6
8
12
  • R R R S S S的连接

非等值连接, s i z e < w e i g h t R ⋈ S \overset{R\Join S}{_{size< weight}} size<weightRS,连接满足 s i z e < w e i g h t size< weight size<weight关系的 R R R S S S中的元组

colorR.patternsizeS.patternweight
A5B7
A5C10
B6B7
B6C10
C8C10

等值连接, R . p a t t e r n = S . p a t t e r n R ⋈ S \overset{R\Join S}{_{R.pattern= S.pattern}} R.pattern=S.patternRS,连接满足 R . p a t t e r n = S . p a t t e r n R.pattern= S.pattern R.pattern=S.pattern关系的 R R R S S S中的元组

colorR.patternsizeS.patternweight
A5A3
B6B7
C8C10
C8C2

自然连接, R ⋈ S R\Join S RS,连接 R R R S S S中同名属性值相等的元组:

colorpatternsizeweight
A53
B67
C810
C82

外连接, R : ⋈ : S R:\Join: S R::S,保留两边关系自然连接后出现Null值属性的元组:

colorpatternsizeweight
A53
B67
C810
C82
D12null
nullEnull2

左外连接, R : ⋈ S R:\Join S R:S,保留左边关系自然连接后出现Null值属性的元组:

colorpatternsizeweight
A53
B67
C810
C82
D12null

右外连接, R ⋈ : S R\Join: S R:S,保留右边关系自然连接后出现Null值属性的元组:

colorpatternsizeweight
A53
B67
C810
C82
nullEnull2
  • R R R的除运算
    设有除关系 K K K
colorsize
5
6

R ÷ K R\div K R÷K表示取出 R R R中使 R . c o l o r R.color R.color完全等于 S . c o l o r S.color S.color R . s i z e R.size R.size完全等于 S . s i z e S.size S.size R . p a r t t e n R.partten R.partten元组

partten
A
  • 3
    点赞
  • 2
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值