【SQL】sql的数学基石之关系代数与关系运算详解

本专栏将从基础开始,循序渐进,讲解数据库的基本概念以及使用,希望大家都能够从中有所收获,也请大家多多支持。
专栏地址: 数据库必知必会
如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。

关系数据库

首先介绍一下什么是关系数据库,关系数据库基于关系模型,是一个或多个关系组成的集合,而关系通俗来讲就是表(由行列构成),关系模型的主要优点是具有简单的数据表示而且能易于表示复杂的查询,到目前为止,SQL语言是最广泛使用的语言,可用于创建,操纵和查询关系数据库, 其基础是关系模型。

下图是关系的示例:

image-20220509112122963

下面分别介绍一下联系关系是什么

  • 联系表示一些实体之间的关联,由实体集和联系集组成,表示相应实体在真实的世界的关系,如下图所示:

image-20220508131521728

  • 关系是一种数学概念,指的是表中的所有属性,例如ID,name,dep_name,salary等,关系表示的是机器的世界,如下图所示:

image-20220509112122963

一般地,我们把集合用数学符号 D D D表示,数据表的每一列都对应于一个集合 D i D_i Di,如果一张表有n列,该表就有n个集合 D 1 , D 2 , . . . , D n , ( D i = a i j ∣ j = 1.... k ) D_1,D_2,...,D_n ,(D_i=a_{ij}|_{j=1....k}) D1,D2,...,Dn(Di=aijj=1....k) ,其中 k k k表示该集合一共有k个元素,而关系 r r r就是 D 1 × D 2 × . . . × D n D_1\times D_2\times...\times D_n D1×D2×...×Dn的子集,其中 × \times ×表示的是笛卡尔积,因而关系就是一组n元组 ( a 1 j , a 2 j , . . . , a n j ) (a_{1j},a_{2j},...,a_{nj}) (a1j,a2j,...,anj)的集合,其中每个 a i j ∈ D i a_{ij}\in D_i aijDi,这么说可能枯燥,下面举一个例子,假设一张表有如下几列:导师、专业、学生,对应结构如下:导师(张清玫教授,刘逸教程)、专业(计算机、信息)、学生(李勇,刘晨、王名),下图则是一个关系r:

image-20220509114020113

笛卡尔积

接下来介绍一下笛卡尔积,直接上例子:

image-20220509114247456

从上图可以看出笛卡尔积就是各个集合的排列组合。

属性类型

关系的每个属性都有一个名称,每个属性的取值集合称为属性的域,属性的值必须是原子的,即不可分割(1NF,第一范式),需要注意,空值null是每一个域的成员,空值给数据库访问和更新带来很多困难,因此应尽量避免使用空值。

那关系是什么?关系涉及两个概念:关系模式和关系实例,其中关系模式描述的是关系的结构,例如:

I n s t r u c t o r − s c h e m a = ( I D : s t r i n g , n a m e : s t r i n g , d e p t n a m e : s t r i n g , s a l a r y : i n t ) Instructor-schema=(ID:string,name:string,deptname:string,salary:int) Instructorschema=(ID:string,name:string,deptname:string,salary:int) I n s t r u c t o r − s c h e m a = ( I D , n a m e , d e p t n a m e , s a l a r y ) Instructor-schema=(ID,name,deptname,salary) Instructorschema=(ID,name,deptname,salary)

关系模式的数学描述如下:

  • A 1 , A 2 , . . . , A n A_1,A_2,...,A_n A1,A2,...,An是属性
  • 一般地: R = ( A 1 , A 2 , . . . , A n ) R=(A_1,A_2,...,A_n) R=(A1,A2,...,An)是一个关系模式
    • 例: I n s t r u c t o r − s c h e m a = ( I D , n a m e , d e p t n a m e , s a l a r y ) Instructor-schema=(ID,name,dept_name,salary) Instructorschema=(ID,name,deptname,salary)

关系实例则表示一个关系的特定实例,例如(‘0001’,‘张三’,‘计算机学院’,20000)。每一行数据被称为是一个元组,元组的顺序性是无关紧要的,但一个关系中不能有重复的元组

image-20220520214441669

码、键的概念

码的概念

  • 定义 K ⊆ R K \sube R KR
  • 如果K值能够在一个关系中唯一地标志一个元组,则K是R的超码
    • 例如 { i n s t r u c t o r − I D , i n s t r u c t o r − n a m e } \{instructor-ID,instructor-name\} { instructorID,instructorname} { i n s t r u c t o r − I D } \{instructor-ID\} { instructorID}都是 { i n s t r u c t o r } \{instructor\} { instructor}的超键,简单点说超键就是一个集合,通过该集合能唯一确定一个元组
  • 如果K是最小超码,则K是候选码
    • 例如 { i n s t r u c t o r − I D } \{instructor-ID\} { instructorID} { i n s t r u c t o r } \{instructor\} { instructor}的候选码。因为他是一个超码,并且它的任意子集都不能成为一个超码
  • 如果k是一个候选码,并由用户明确定义,则K是一个主键。主键通常用下划线标记

外键的概念

首先以一个例子来说明什么是外键:

image-20220520215420054

学生表中有专业号这一属性,通过专业号这一属性可以在专业表中查询到专业名称,这种在其他表中是主键的属性叫做外码(外键)。

关系代数基本运算

关系代数有六个基本的运算和一些附加运算,六个基本运算是:

image-20220520215753298

附加运算是:

image-20220520215843964

下面依次介绍这六个关系

选择运算

数据库的表的关系r如下图所示:

image-20220520215958268

需求:选择元组,满足:A=B and D > 5

数学表达为: σ A = B a n d D > 5 ( r ) \sigma_{A=B and D \gt5}(r) σA=BandD>5(r)

对应的结果如下:

image-20220520220305766

详细定义如下:

image-20220520220356734

投影运算

数据库的表的关系r如下图所示:

image-20220520220443075

需求:选择A、C

数学表达为: π A , C ( r ) \pi_{A,C}(r) πA,C(r)

对应的结果如下:

image-20220520220632157

详细定义如下:

image-20220520220716550

投影运算

数据库的表的关系r如下图所示:

在这里插入图片描述

需求:选择A、C

数学表达为: π A , C ( r ) \pi_{A,C}(r) πA,C(r)

对应的结果如下:

image-20220520220632157

详细定义如下:

并运算

数据库的两张表的关系r、s如下图所示:

image-20220520220817172

需求:将r与s合并

数学表达为: r ∪ s r\cup s rs

对应的结果如下:

image-20220520221007529

详细定义如下:

image-20220520221021381

差运算

数据库的两张表的关系r、s如下图所示:

image-20220520220817172

需求:将r与s做差

数学表达为: r − s r-s rs

对应的结果如下:

image-20220520221138867

详细定义如下:

image-20220520221206736

广义笛卡尔积

数据库的两张表的关系r、s如下图所示:

image-20220520221333369

需求:计算r与s的广义笛卡尔积

数学表达为: r × s r\times s r×s

对应的结果如下:

image-20220520221417579

详细定义如下:

image-20220520221430796

如果有相同的属性,则笛卡尔积的结果如下:

image-20220520221515754

复合运算

我们可以使用多种运算符构建表达式,数据库的两张表的关系r、s如下图所示:

image-20220520221333369

需求:选出所有r.A = s.C的元组

r × s r \times s r×s如下图所示:

image-20220520221812196

σ A = C ( r × s ) \sigma_{A=C}(r\times s) σA=C(r×s)的结果如下图:

image-20220520221908745

所以数学表达为: σ A = C ( r × s ) \sigma_{A=C}(r\times s) σA=C(r×s)

更名运算

更名运算允许我们使用其他名字指代关系,具体描述看下图:

image-20220520222117958

查询示例

假设现在有一个银行的数据库,相应的表关系如下:

image-20220520222324732

例1-例2:

image-20220520222435084

例3-例4:

image-20220520222532718

例5:

image-20220520222645611

例6:

image-20220520222933194

例7:

image-20220520223202700

关系代数附加运算

使用关系代数的附加运算,虽不能增加关系代数的表达能力,但却可以简化一些常用的查询,附加运算有:

  1. 集合交
  2. 自然连接
  3. 赋值

交运算

例:关系r,s如下图所示

image-20220520223511619

交运算 r ∩ s r \cap s rs的结果如下:

image-20220520223613825

详细介绍如下:

image-20220520223631305

自然连接

自然连接的表示符号为:

image-20220520223859774

需求,将r和s自然连接:

image-20220520224114538

自然连接的结果如下:

image-20220520224151266

详细介绍如下

image-20220520223918228

theta连接

image-20220520224301808

除运算

r ÷ s r\div s r÷s适用于包含了"对所有的"此类短语的查询

image-20220520224422629

例2:

image-20220520224928931

例3:

image-20220520225105254

例4:

image-20220520225245038

赋值运算

赋值运算(←)可以使复杂的查询表达变得简单,使用赋值运算,可以把查询表达为一个顺序程序,该程序包括:

  1. 一系列赋值
  2. 一个其值被作为查询结果显示的表达式

对关系代数查询而言,赋值必须是赋给一个临时关系变量。

image-20220520225441540

R-S表示从R中删去S中的属性的集合。

在temp2中, ( t e m p 1 × s ) (temp1\times s) (temp1×s)表示的是R-S与S的笛卡尔积,相当于所有的排列组合, π R − S , S ( r ) \pi_{R-S,S}(r) πRS,S(r)表示的就是r本身的集合,将两者相减留下的就是不能完全覆盖的元组,将其减去就是能完全覆盖的元组,也就是除的结果。

查询示例

假设现在有一个银行的数据库,相应的表关系如下:

image-20220520222324732

例1:

image-20220520230104578

例2-例3:

image-20220520230135924

拓展关系代数运算

广义投影

广义投影允许在投影列表中使用算术函数来对投影操作进行扩展,广义投影运算形式为:

image-20220520230345407

聚集函数

聚合函数输入一个值集合,然后返回单一值作为结果

  • avg: 平均值
  • min: 最小值
  • max: 最大值
  • sum: 值的总和
  • count: 值的数量

image-20220520230453852

G 1 , G 2 . . . G_1,G_2... G1,G2... 是关系E中用于分组的一些属性。

例1:

image-20220520230631779

例2:

image-20220520230745668

注意:

image-20220520230822703

外连接
在这里插入图片描述
image-20220520230947224

image-20220520231043907

空值

image-20220520231215139

image-20220520231238708

数据库的修改

数据库的内容可以使用下面的操作来修改:

  • 删除
  • 插入
  • 更新

所有这些操作都使用赋值操作表示。

删除

image-20220520231532265

删除示例

image-20220520231546497

插入

image-20220520231558359

插入示例

image-20220520231801169

更新

image-20220520231841479

更新示例

image-20220520231900040

猜你喜欢

转载自blog.csdn.net/Learning_xzj/article/details/124897004