v在元组演算中,元组关系演算系演算表达式(简称为元组表达式)是以元组变量为单位。记作: {t|Φ(t)}
v其中t是元组变量, Φ(t)是由原子公式和运算符组成的公式。
v如果元组变量前有“全称量词”(")或“存在量词”($),则称其为约束变量,否则称为自由变量
v原子公式有三种形式:
v1. R(t)
vR是关系名,t是关系元组变量。R(t)表示 t是关系R中的元组。关系可表示:{t|R(t)}
v2. t[i]θu[j]
v其中 t和u 都是元组变量,θ是算术比较运算符。表示元组t的第i的分量与元组u的第j个分量之间满足θ关系。
v例如: t[1]<u[2]
v
3. t[i] θa或a θt[i]
其中:a是一个常量。表示元组s的第i个分量与常量a之间满足θ 关系。
下面用关系演算表达式表示关系代数的五种基本运算:
v(1)并 RÈS={ t |R(t) ÚS(t)}
v(2)差 R-S={ t | R(t) Ù ┑S(t)}
v(3)广义笛卡儿积
R´S= { t(n+m)|($ u(n))($ v(m))(R(u) Ù S(v) Ù t[1]=u[1]Ù… Ù t[n]=u[n] Ù t[n+1]=v[1] Ù … Ù t[n+m]=v[m])}
vt(n+m)表示t有目数(n+m), u (n)表示u的n元组, v(m)表示v的m元组。
v(4)投影
v∏i1,i2, …ik(R)={t (k)| ($u)(R(u) Ùt[1]=u[i1] Ù … Ùt[k]=u[ik]) }
v(5)选择
v sF(R) = { t |R(t) Ù ‘ F’ }
v其中: F’ 是F的等价公式。
v设有如下3个关系模式:
v学生(学号,姓名,年龄)
v课程(课程号,课程名,学分)
v成绩(学号,课程号,成绩)
v(1)查询年龄大于或等于20岁的学生学号与姓名
vП学号,姓名(σ年龄>=20(学生))}
v{t|($(u)(学生(u)∧u[3]>=20∧t[1]=u[1] ∧t[2]=u[2])}
v(2) 查询课程号为C2的学号与姓名
vП学号,姓名(学生) П学号(σ课程号=’C2’(课程))
v{t|($uu[2 )($v)((学生(u)∧课程(v)∧v[1]=’C2’
v∧u[1]=v[1]∧t[1]=u[1]∧t[2]=])}
v域关系演算(Domain Relational Calculus)类似于元组关系演算,不同的是用域变量代替元组变量的每一分量,域变量的变化范围是某个值而不是一个关系。
v域关系演算表达式的一般形式为:
v { < t1, t2, … , tk > | P( t1, t2, … , tk)}
vti 代表域变量,P为由原子构成的公式
v原子公式有两种形式:
v(1)R( x1, x2, … , xn )是原子公式,表示元组( x1, x2, … , xn )是关系R中的一个元组。
v(2)x q y,其中x,y是常量或域变量, q是比较运算符。
v 域关系演算公式中也可使用┑ 、∧ 、Ú 等逻辑运算符,存在量词$和全称量词"。
v设有如下3个关系模式:
v学生(学号,姓名,年龄)
v课程(课程号,课程名,学分)
v成绩(学号,课程号,成绩)
v(2) 查询课程号为C2的学号与姓名
vП学号,姓名(学生) П学号(σ课程号=’C2’(课程))
v{wx|($w)($t)((学生(wxz)∧成绩(tuv)∧(u=’C2’
v∧w=t))}
v{t|($u)($v)((学生(u)∧成绩(v)∧v[2]=’C2’
v∧u[1]=v[1]∧t[1]=u[1]∧t[2]=u[2])}