关系数据库的关系代数运算符有8种,分为两大类,如下表所示:
分类 | 运算符 | 含义 |
---|---|---|
传统关系运算符 | ∪ ∪ ∪ | 并 |
− − − | 差 | |
∩ ∩ ∩ | 交 | |
× × × | 笛卡尔积 | |
专用关系运算符 | σ | 选择 |
∏ | 投影 | |
⋈ | 连接 | |
÷ | 除 |
传统的集合运算是二元运算,包括并、差、交、笛卡尔积4种运算。设有两关系R、S。
关系R与关系S的并记作: R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t\ |\ t\in R \lor t\in S\} R∪S={t ∣ t∈R∨t∈S}即合并R和S所有元组
关系R与关系S的交记作: R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S=\{t\ |\ t\in R \land t\in S\} R∩S={t ∣ t∈R∧t∈S}关系的交也可用差来表示: R ∩ S = R − ( R − S ) R\cap S=R-(R-S) R∩S=R−(R−S)即取出R与S中共有的元组
关系R与关系S的差记作: R − S = { t ∣ t ∈ R ∧ t ∉ S } R- S=\{t\ |\ t\in R \land t\notin S\} R−S={t ∣ t∈R∧t∈/S}即去掉R中属于S的元素
关系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⌢ ∣ tR∈R∧tS∈S}这里的笛卡尔积指的是广义笛卡尔积,对元组进行笛卡尔积有点类似于小学数学课上学过的握手游戏。
对于 R × S R\times S R×S来说,表示每个R中的元组都要与S中的元组连接一次
设 R R R:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 10 |
蓝 | B | 5 |
S S S:
color | pattern | size |
---|---|---|
红 | B | 10 |
红 | C | 10 |
蓝 | B | 5 |
则有:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 10 |
蓝 | B | 5 |
红 | C | 10 |
color | pattern | size |
---|---|---|
红 | B | 10 |
蓝 | B | 5 |
color | pattern | size |
---|---|---|
红 | A | 5 |
R.color | R.pattern | R.size | S.color | S.pattern | S.size |
---|---|---|---|---|---|
红 | A | 5 | 红 | B | 10 |
红 | A | 5 | 红 | C | 10 |
红 | A | 5 | 蓝 | B | 5 |
红 | B | 10 | 红 | B | 10 |
红 | B | 10 | 红 | C | 10 |
红 | B | 10 | 蓝 | B | 5 |
蓝 | B | 5 | 红 | B | 10 |
蓝 | B | 5 | 红 | C | 10 |
蓝 | B | 5 | 蓝 | B | 5 |
专用的关系运算符包括选择、投影、连接、除运算
在具体介绍运算符之前为了方便表达,先引入几个符号:
选择关系运算记作: σ 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 ∣ t∈R∧riθ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列值等于字符串李勇的行
投影关系运算记作: ∏ r i ( R ) = { t [ r i ] ∣ t ∈ R } \prod\ _{r_i}(R)=\{t[r_i]\ |\ t\in R\} ∏ ri(R)={t[ri] ∣ t∈R}即取出 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列形成新的关系
连接关系运算记作: 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θrjR⋈S={tRtS ∣tR∈R∧tS∈R∧tR[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 θ的行
连接有四种特殊形式:
除关系运算记作: 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] ∣ tR∈R∧∏ 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元组,形成新的关系
设 R R R:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 6 |
蓝 | C | 8 |
蓝 | D | 12 |
S S S:
pattern | weight |
---|---|
A | 3 |
B | 7 |
C | 10 |
C | 2 |
E | 2 |
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 6 |
color | size |
---|---|
红 | 5 |
红 | 6 |
蓝 | 8 |
蓝 | 12 |
非等值连接, s i z e < w e i g h t R ⋈ S \overset{R\Join S}{_{size< weight}} size<weightR⋈S,连接满足 s i z e < w e i g h t size< weight size<weight关系的 R R R与 S S S中的元组
color | R.pattern | size | S.pattern | weight |
---|---|---|---|---|
红 | A | 5 | B | 7 |
红 | A | 5 | C | 10 |
红 | B | 6 | B | 7 |
红 | B | 6 | C | 10 |
蓝 | C | 8 | C | 10 |
等值连接, 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.patternR⋈S,连接满足 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中的元组
color | R.pattern | size | S.pattern | weight |
---|---|---|---|---|
红 | A | 5 | A | 3 |
红 | B | 6 | B | 7 |
蓝 | C | 8 | C | 10 |
蓝 | C | 8 | C | 2 |
自然连接, R ⋈ S R\Join S R⋈S,连接 R R R与 S S S中同名属性值相等的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
外连接, R : ⋈ : S R:\Join: S R:⋈:S,保留两边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
蓝 | D | 12 | null |
null | E | null | 2 |
左外连接, R : ⋈ S R:\Join S R:⋈S,保留左边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
蓝 | D | 12 | null |
右外连接, R ⋈ : S R\Join: S R⋈:S,保留右边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
null | E | null | 2 |
color | size |
---|---|
红 | 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 |