database-06-形式化关系查询语言

2217 字
11 分钟
database-06-形式化关系查询语言

数据库系统原理
形式化关系查询语言
2026#

  • 关系代数:Relational Algebra
  • 元组关系演算:Tuple Relational Calculus*
  • 域关系演算:Domain Relational Calculus*

关系代数概述§6.1#

  • 一个运算符使用一个或两个关系作为输入
    运算结果输出一个关系.
  • 基本运算
    • 选择select: σ\textcolor{red}{\Large\sigma}
    • 投影project: π\textcolor{red}{\Large\pi}Π\textcolor{red}\Pi
    • 并集union: \textcolor{red}\cup
    • 差集set difference: \textcolor{red}-
    • 笛卡尔积Cartesian product: ×\textcolor{red}\times

Select Operation/选择运算§6.1.1#

  • 单目运算符: σp(r)\textcolor{red}{\Large\sigma}_p(r)
    • pp是选择条件(注意写成下标)
    • σp(r)={ttrp(t)}{\Large\sigma}_p(r)=\{t|t \in r \land p(t)\}
  • pp是个逻辑表达式
    • 可以使用逻辑连接符: \land (and), \lor (or), ¬\lnot (not)
    • 可以使用逻辑比较:==, \neq, >>, \geq, <<, \leq
    • 可使用属性名、常量、嵌套圆括弧(改变优先级)
  • 如:σdept_name="Physics"salary>5000(instructor){\Large\sigma}_{dept\_name \textcolor{red}{="}Physics\textcolor{red}{" \land} salary \textcolor{red}> 5000}(instructor)
  • 例: 关系 rr    ➔  σA=BD>5(r){\Large\sigma}_{A=B \land D>5}(r)
    ABCD
    αα17
    αβ57
    ββ123
    ββ2310
    ABCD
    αα17
    ββ2310

Project Operation/投影运算§6.1.2#

  • 单目运算符: ΠA1,A2,...Ak(r)\textcolor{red}\Pi_{A1,A2,...Ak}(r)
    • A1,A2,...AkA1,A2,...Ak是关系rr的属性名 (注意写成下标)
  • 运算结果是一个关系:
    • 它保留属性A1,A2,...AkA1,A2,...Ak,去掉了其他属性
    • 如出现重复行,则去掉重复行
  • 如:Πid,dept_name,salary(instructor)\Pi_{id, dept\_name, salary}(instructor)
  • 例: 关系 rr ➔ ΠA,C(r)\Pi_{A,C}(r) ➔ 去掉重复行
    ABC
    α101
    α201
    β301
    β402
    AC
    α1
    α1
    β1
    β2
    AC
    α1
    β1
    β2

关系运算组合§6.1.3#

  • 一个运算符的输出可以作为另一个的输入,从而构成
    关系代数表达式(relational-algebra expression)
  • 如:Πname(σdept_name="Physics"(instructor))\Pi_{name}({\Large\sigma}_{dept\_name="Physics"}(instructor))

Union Operation/并集运算§6.1.6#

  • 双目运算符: rsr \textcolor{red}\cup s
    • rs={ttrts}r \cup s=\{t|t \in r \lor t \in s\}
    • r,sr,s 必须是兼容的关系(compatible relations)
      • r,sr,s 含有相同数量的属性
      • 对应属性的域必须相容:如rrss的第二个属性必须来自同一个域
  • 如:Πsnoσssex=""StuΠsnoσsage>19Stu\Pi_{sno}{\Large\sigma}_{ssex="男"}Stu \textcolor{red}\cup \Pi_{sno}{\Large\sigma}_{sage>19}Stu
  • 例: 关系rr , 关系ss  ➔ rsr \cup s
    AB
    α1
    α2
    β1
    AB
    α2
    β3
    AB
    α1
    α2
    β1
    β3

Set Intersection Operation/交集运算§6.1.6#

  • 双目运算符: rsr \textcolor{red}\cap s
    • rs={ttrts}r \cap s=\{t|t \in r \land t \in s\}
    • r,sr,s 必须是兼容的关系(compatible relations)
      • r,sr,s 含有相同数量的属性
      • 对应属性的域必须相容:如rrss的第二个属性必须来自同一个域
  • 如:Πsageσssex=""StuΠgradeσcno=3SC\Pi_{sage}{\Large\sigma}_{ssex="男"}Stu \textcolor{red}\cap \Pi_{grade}{\Large\sigma}_{cno=3}SC

Set Difference Operation/差集运算§6.1.6#

  • 双目运算符: rsr \textcolor{red}- s
    • rs={ttrts}r - s=\{t|t \in r \land t \notin s\}
    • r,sr,s 必须是兼容的关系(compatible relations)
      • r,sr,s 含有相同数量的属性
      • 对应属性的域必须相容:如rrss的第二个属性必须来自同一个域
  • 如:ΠcnoCouΠcnoσsno="95001"SC\Pi_{cno}Cou \textcolor{red}- \Pi_{cno}{\Large\sigma}_{sno="95001"}SC
  • 例: 关系rr , 关系ss  ➔ rsr - s
    AB
    α1
    α2
    β1
    AB
    α2
    β3
    AB
    α1
    β1

元组运算符号定义§6.2.0#

trt \in rt[Ai]t[A_i]t[A]t[A]#

[ rR(A1,A2,A3,A4)r \in R(A_1,A_2,A_3,A_4) ]

A1A2A3A4
v11v12v13v14
v21v22v23v24
v31v32v33v34
v41v42v43v44
  • trt \in r: ttrr的一个元组
    如: t=(v21,v22,v23,v24)t=(v_{21},v_{22},v_{23},v_{24})
  • t[Ai]t[A_i]: ttAiA_i属性分量值
    如: t[A3]=v23t[A_3]=v_{23}
  • t[A]t[A]其中AUA \subseteq U:
    保留ttAA中的分量形成新元组
    如: A={A2,A4}A=\{A_2,A_4\}t[A]=t[A2,A4]=(v22,v24)t[A]=t[A_2,A_4]=(v_{22},v_{24})

trts\overset{\frown}{t_rt_s} 称为 元组的连接(Concatenation)#

[ sS(B1,B2)s \in S(B_1,B_2) ]

B1B2
x11x12
x21x22
x31x32

[ rR(A1,A2,A3)r \in R(A_1,A_2,A_3) ]

A1A2A3
v11v12v13
v21v22v23
v31v32v33

  它是一个(n+m)(n+m)列的元组,前n个分量为rr中的一个n元组,后m个分量为ss中的一个m元组。
trt_r,tst_s分别为rr的第2行和ss的第3行,则: trts=(v21,v22,v23,x31,x32)\overset{\frown}{t_rt_s}=(v_{21},v_{22},v_{23},x_{31},x_{32})

Cartesian-Product Operation/笛卡尔积§6.1.4#

  • 双目运算符: r×sr \textcolor{red}\times s
    • r×s={tqtrqs}r \textcolor{red}\times s=\{\overset{\frown}{tq} | t \in r \land q \in s\}
    • rrss有同名属性,则需重命名属性防止属性名重复
  • 例: 关系rr , 关系ss  ➔   r×sr \times s
    AB
    α1
    β2
    γ3
    BCD
    α7x
    β7x
    ABrBsCD
    α1α7x
    α1β7x
    β2α7x
    β2β7x
    γ3α7x
    γ3β7x

Theta Join/连接/θ连接§6.1.5#

  • 连接是双目运算符: rθsr \textcolor{red}{\Join_{\theta}} s
    • rθs=σθ(r×s)r \textcolor{red}{\Join_{\theta}} s={\Large\sigma}_\theta(r \times s)
    • σStu.sno=SC.sno(Stu×SC){\Large\sigma}_{Stu.sno=SC.sno}(Stu \times SC)
      可用连接表达为 StuStu.sno=SC.snoSCStu \Join_{Stu.sno=SC.sno} SC
  • 例: rC<Esr \textcolor{red}{\Join_{C<E}} s
    r
    ABC
    a1b15
    a1b26
    a2b312
    s
    BE
    b32
    b310
    b16
    b52
    C<E
    ABrCBsE
    a1b15b310
    a1b15b16
    a1b26b310

rθs=σθ(r×s)r \Join_{\theta} s={\Large\sigma}_\theta(r \times s)#

r
ABC
a1b15
a1b26
a2b312
s
BE
b32
b310
b16
b52
σC<Er.B=s.B(r×s)
ABrCBsE
a1b15b32
a1b15b310
a1b15b16
a1b15b52
a1b15b32
a1b26b310
a1b26b16
a1b26b52
a2b312b32
a2b312b310
a2b312b16
a2b312b52

Nature Join/自然连接§6.1.5#

  • 双目运算符: rsr \textcolor{red}{\Join} s
    • 自动寻找rrss公共属性作为等值连接条件
    • 连接结果中的公共属性,只保留一份
  • 例1:
    • S ( Sno, Sname, Ssex, Sage, dept )
      SC( Sno, Cno, Grade )
    • SSC=S \textcolor{red}\Join SC=
      ΠSC.Sno,Sname,SSex,Sage,dept,Cno,Grade(SS.Sno=SC.SnoSC)\Pi_{SC.Sno,Sname,SSex,Sage,dept,Cno,Grade} (S \Join_{S.Sno=SC.Sno}SC)
  • 例2:
    r
    ABC
    a1b15
    a1b26
    a2b312
    s
    BE
    b32
    b310
    b16
    b52
    r r.B=s.B s
    ABrCBsE
    a1b15b16
    a2b312b32
    a2b312b310

自然连接的一些特性§6.1.5#

  • 顺序可交换
    • r1r2=r2r1r_1 \Join r_2 = r_2 \Join r_1
    • r1r2r3=r2r3r1r_1 \Join r_2 \Join r_3 = r_2 \Join r_3 \Join r_1
  • 如果自然连接的表之间没有“公共属性”
    • 它会等同于笛卡尔积rs=r×sr \Join s = r \times s

Assignment Operation/赋值运算* §6.1.7#

  • 单目运算符: x关系代数表达式x \textcolor{red}{\leftarrow} 关系代数表达式
    • 严格地说,它不是“运算符”,只是一个“命名符”
  • 例如: Physicsσcname="物理"CouPhysics \leftarrow {\Large\sigma}_{cname="物理"}Cou
    Musicσcname="音乐"CouMusic \leftarrow {\Large\sigma}_{cname="音乐"}Cou
    PhysicsMusicPhysics \cup Music

Rename Operation/重命名运算§6.1.8#

  • 单目运算符: ρx关系代数表达式\textcolor{red}{{\Large\rho}_x} 关系代数表达式
    • 严格地说,它不是“运算符”,只是一个更强的“命名符”
    • 除了关系重命名,它还能够对属性进行重命名
  • 例如: ρxSC{\Large\rho}_{x}SC
    StuStu.sno=x.snoxStu \Join_{Stu.sno=x.sno} x
  • 又如:
    ρy(no,cno,grade)SC{\Large\rho}_{y(no,cno,grade)}SC
    Stusno=noyStu \Join_{sno=no} y

Image Set/象集§6.1.x.1#

  • 象集:ZxZ_x
    • 给定一个关系 rR(X,Z)r\in R(X,Z)XXZZ为属性组。我们定义,当 t[X]=xt[X]=x 时,xxrr中的象集Images Set)为:Zx ={t[Z]tr,t[X]=x}Z_x = \{t[Z] | t \in r, t[X]=x\}
    • 它表示rr中属性组XX上值为xx的诸元组在ZZ上分量的集合
  • 例:
    性别年龄姓名其他
    21张三333…
    22李四444…
    19王五555…
    22何六666…
    X={性别,年龄}X=\{性别,年龄\}
    x=(,22)x=(男,22)
    ZxZ_x
    姓名其他
    李四444…
    何六666…

Division Operation/除法运算§6.1.x.2#

  • 双目运算符: r÷sr \textcolor{red}{\div} s
    • r÷s={tr[X]trrΠYsYx}r \textcolor{red}\div s=\{t_r[X]|t_r \in r \land \Pi_Ys \subseteq Y_x\}
    • 其中:
      • XX, YY, ZZrR(X,Y)r \in R(X,Y),sS(Y,Z)s \in S(Y,Z)关系模式的属性组
      • RR中的YYSS中的YY可以有不同的属性名,但必须出自相同的域
      • YxY_x 为t[X]=xt[X]=x时,xxrr中的象集(Images Set)
  • 基本思想:
    rrss的除运算得到一个新的关系pP(X)p \in P(X),是rr中满足下列条件的元组在XX属性列上的投影:元组在XX上分量值xx的象集YxY_x包含(涵盖)了ssYY上投影的集合

除法的计算方法§6.1.x.3#

rR(X,Y)r \in R(X,Y),sS(Y,Z)s \in S(Y,Z),求r÷sr \textcolor{red}{\div} s

  • 思路:
    1. 求得ΠY(s)\Pi_Y(s)
    2. rr中每个元组tt做如下步骤:
      1. 求取象集Yt[X]={u[Y]uru[X]=t[X]}Y_{t[X]}=\{u[Y] | u \in r \land u[X]=t[X]\}
      2. Yt[X]ΠY(s)Y_{t[X]} \supseteq \Pi_Y(s)则将t[X]t[X]放入结果集中
  • 例:
    X={ A }, Y={ B, C }, Z={ D }
    πY(s)={ (b1, c2), (b2, c3) }
    Ya1={ (b1, c2), (b2, c3), (b2, c1) }
    Ya2={ (b3, c7), (b1, c2) }
    Ya3={ (b2, c3), (b1, c2) }
    r ÷ s = { (a1) , (a3) }
    r∈R(X,Y)
    ABC
    a1b1c2
    a2b3c7
    a3b2c3
    a1b2c3
    a2b1c2
    a3b1c2
    a1b2c1
    s∈S(Y,Z)
    BCD
    b1c2d1
    b2c3d1
    b2c3d2

Aggregate Operation/聚集运算§6.1.x.4#

  • 聚集函数(Aggregate Functions)
    sum,avg,min,max,countsum, avg, min, max, count
  • 单目运算符: A1,A2,...,AnGF1,F2,...,Fm(r)_{A_1,A_2,...,A_n}\textcolor{red}{\mathcal{G}}_{F_1,F_2,...,F_m} (r)
    • A1,A2,...,An_{A_1,A_2,...,A_n} 是分组所依据(group by)的属性(可不指定)
    • F1,F2,...,Fm_{F_1,F_2,...,F_m} 是聚集函数,如: avg(A3)avg(A_3)
    • 有一些书籍或教材使用 γ\textcolor{red}\gamma 替代 G\textcolor{red}{\mathcal{G}}
  • 例:
    • Gavg(sage),max(sage)Stu\textcolor{red}{\mathcal{G}}_{avg(sage),max(sage)}Stu
      {(19,20)}\{(19,20)\} //所有学生的平均和最大年龄
    • ssexGavg(sage),max(sage)Stu_{ssex}\textcolor{red}{\mathcal{G}}_{avg(sage),max(sage)}Stu
      {("",19.5,20),("",18.5,19)}\{("男",19.5,20),("女",18.5,19)\} //按性别分组统计

运算符优先级§6.1.x.5#

  • 单目运算符 > 双目运算符
  • ×÷×÷⋈ > ∪∩-
  • 如果实在弄不清?
    • 使用配对圆括号“( )( )
    注意:我们只用圆括号,没有什么“大括号、小括号、方括号、花括号……”
    作为专业人士请只使用配对“圆括号”
    热爱生命和分数,远离方括号、花括号之类

几个例子§6.1.x.6#

  • 选修2号课程的学生学号
    πSno(σCno=2(SC)){\Large\pi}_{Sno}({\Large\sigma}_{Cno=2}(SC))
  • 至少选了一门以5号课为先行的课程的学生姓名
    πSname(πCpno=5CouSCπSno,SnameStu){\Large\pi}_{Sname}({\Large\pi}_{Cpno=5}Cou⋈SC⋈{\Large\pi}_{Sno,Sname}Stu)
  • 至少选修1和3号课程的学生学号
    πSno,CnoSC÷πCno(πCno=1Cno=3Cou){\Large\pi}_{Sno, Cno}SC÷{\Large\pi}_{Cno}({\Large\pi}_{Cno=1∨Cno=3}Cou)

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
database-06-形式化关系查询语言
https://meteorfate-github-io.pages.dev/posts/06-形式化关系查询语言/
作者
METEORfate
发布于
2026-03-25
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
METEORfate
Somebody
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
15
分类
3
标签
20
总字数
84,986
运行时长
0
最后活动
0 天前

目录