数据库 关系代数

基本关系代数运算

在这里插入图片描述
在这里插入图片描述

选择运算

σp(R)={t∣t∈R∧p(t)=True}σ_p(R)= \{t|t∈R∧p(t)=True\}σp(R)={ttRp(t)=True}

p 为选择谓词 :

  • 由逻辑运算符与(⋀)、或(∨)、非(¬)连接的若干原子表达式构成的公式

  • 原子表达式的形式为:X θ Y

    • X,Y:属性名、常量,或者函数值

    • θ:比较运算符,包括=、>、<、≥、≤、≠

查询计算机系所有学生的信息:

σSdept=′′CS′′(Student)σ_ {Sdept} = _{''CS ''} (Student)σSdept=′′CS′′(Student)

查询计算机系年龄大于等于18的学生的信息,以及所有数学系的学生信息:

σ(Sdept=′′CS′′⋀Sage≥18)∨Sdept=′′MA′′(Student)σ_ {(Sdept=''CS'' ⋀ Sage≥18) ∨ Sdept}=_{''MA''}(Student)σ(Sdept=′′CS′′Sage18)Sdept=′′MA′′(Student)

投影运算

ΠA1,A2,…,Ak(R)={t[A1,A2,…,Ak]∣t∈R}Π_{A_1,A_2,…,A_k}(R)=\{t[A_1,A_2,…,A_k] | t∈R\}ΠA1,A2,,Ak(R)={t[A1,A2,,Ak]tR}

选择属性列 A1,A2,…,AkA_1,A_2,…,A_kA1,A2,,Ak 的值,删除重复元组

计算机系所有学生的学号、姓名:

ΠSno,Sname(σSdept=′′CS′′(Student))Π_{Sno, Sname }(σ_{Sdept}=''CS'' (Student))ΠSno,Sname(σSdept=′′CS′′(Student))

并运算

R∪S={t∣t∈R∨t∈S}R∪S = \{ t | t∈R∨t∈S\}RS={ttRtS}

  • R和S中属性个数要相同
  • R和S中的属性应存在一一对应关系
  • R中每个属性的域和S中对应属性的域要相同

Union:去重 Union all:不去重

查询所有17或18岁学生的信息:

σSage=17(Student)∪σSage=18(Student)σ_ {Sage=17 }(Student)∪σ_{ Sage=18 }(Student)σSage=17(Student)σSage=18(Student)

差运算

$ R−S={ t | t∈R ⋀ t∉S}$

  • 同上

计算机系中的未成年同学的信息:

σSdept=′′CS′′(Student)−σSage≥18(Student)σ_ {Sdept=''CS''}(Student) − σ_{Sage≥18}(Student)σSdept=′′CS′′(Student)σSage18(Student)

笛卡尔积运算

$ R×S={(t,q) | t∈R ∧q∈S}$
在这里插入图片描述

重命名运算

ρS(A1,A2,…,An)(R)ρ_S(A_1,A_2,…,A_n)(R)ρS(A1,A2,,An)(R)

  • 将关系名 R 重命名为 S
  • 将各属性按照从左到右的顺序重命名为A1,A2,…,AnA_1,A_2,…,A_nA1,A2,,An

ρS(R)ρ_S(R)ρS(R):只修改关系名,不修改属性名

附加关系代数运算

交运算

R∩S={t∣t∈R∧t∈S}R∩S=\{ t | t∈R∧t∈S\}RS={ttRtS}

R∩S=R−(R−S)R ∩ S=R−(R−S)RS=R(RS)

  • 同上

查询计算机系年龄大于等于18的学生的信息

σSdept=′′CS′′(Student)∩σSage≥18(Student)σ_ {Sdept=''CS''}(Student) ∩ σ_{Sage≥18}(Student)σSdept=′′CS′′(Student)σSage18(Student)

连接运算

R⋈pS={(t,q)∣t∈R∧q∈S∧p((t,q))=True}R⋈_pS=\{(t,q) | t∈R ∧q∈S ∧ p((t,q))=True\}RpS={(t,q)tRqSp((t,q))=True}

等值连接 = :

Student⋈Student.Sno=SC.SnoSCStudent⋈_{Student.Sno=SC.Sno}SCStudentStudent.Sno=SC.SnoSC

自然连接 :

R和S中属性名相同的列做等值连接

Student⋈SCStudent⋈SCStudentSC

外连接:连接运算的扩展,可以处理缺失值

**左外连接(R⟕S)**会保留左边关系R的所有元组,R中的元组,若在S中没有在同名属性上取值相同的元组,会用空值来填充S中的属性

**右外连接(R⟖S)**会保留右边关系S的所有元组,对于S中在R中不存在同名属性上取值相同的元组,会用空值来填充R中的属性

全外连接(R⟗S)的查询结果是左外连接和右外连接查询结果的并集

在这里插入图片描述

赋值运算

T←ET←ETE

temp←Student×SCtemp←Student × SCtempStudent×SC

result←σStudent.Sno=SC.Sno(temp)result←σ_{Student.Sno=SC.Sno}(temp)resultσStudent.Sno=SC.Sno(temp)

除运算

R(A1,A2,…,Am,B1,B2,…,Bn)R(A_1,A_2,…,A_m,B_1,B_2,…,B_n)R(A1,A2,,Am,B1,B2,,Bn)S(B1,B2,…,Bn)S(B_1,B_2,…,B_n)S(B1,B2,,Bn)是两个关系,则R÷SR÷SR÷S的属性为A1,A2,…,AmA_1,A_2,…,A_mA1,A2,,Am

R÷S={t∣t∈ΠA1,A2,…,Am(R)⋀(∀q∈S,(t,q)∈R)}R÷S=\{ t | t∈Π_{A_1,A_2,…,A_m}(R) ⋀ (∀q∈S, (t,q)∈R)\}R÷S={ttΠA1,A2,,Am(R)(qS,(t,q)R)}

例如SC÷CourseSC ÷ CourseSC÷Course​​,找到选择所有课程的同学;

在这里插入图片描述

扩展关系代数运算

去重运算

δ(R)δ(R)δ(R)

广义投影运算

允许在投影列表中使用算术运算和字符串函数等来对投影运算进行扩展

ΠF1,F2,…,Fk(R)Π_{F_1,F_2,…,F_k}(R)ΠF1,F2,,Fk(R)

  • F1,F2,…,Fk{F_1,F_2,…,F_k}F1,F2,,Fk为包含常量、变量(R中列)、运算符(算术运算符,逻辑运算符,关系运算符)、函数等的多个表达式
  • 例如2023-age得到出生年份

聚集运算

GF1(A1),F2(A2),…,Fk(Ak)(R)G_{F_1(A_1),F_2(A_2),…,F_k}(A_k)(R)GF1(A1),F2(A2),,Fk(Ak)(R)

查询学生总人数,以及学生平均年龄:

Gcount(Sno),avg(Sage)(Student)G_{count(Sno), avg(Sage)}(Student)Gcount(Sno),avg(Sage)(Student)

分组运算

G1,G2,…,GlGF1(A1),F2(A2),…,Fk(Ak)(R)_{G_1,G_2,…,G_l} G_{F_1(A_1),F_2(A_2),…,F_k(A_k)}(R)G1,G2,,GlGF1(A1),F2(A2),,Fk(Ak)(R)

查询各个系的男生和女生人数:

Sdept,SgenderGcount(Sno)(Student)_{Sdept,Sgender} G_{count(Sno)}(Student)Sdept,SgenderGcount(Sno)(Student)

在这里插入图片描述

排序运算

τA1,A2,…Ak(R)τ_{A_1,A_2,…A_k}(R)τA1,A2,Ak(R)

将学生表按照年龄排序,对于年龄相同的元组,按照学号排序

τSage,Sno(Student)τ_{Sage,Sno}(Student)τSage,Sno(Student)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值