这本的数据库研究的都是相关关系数据库,后面讲的全是这个相关关系。
一行(tuple)是一个实体,行的排列是无序的。
列名(colunm_name)叫做属性(attribute)
一个表(table)是一个实体的集合,就是一个相关关系(relation)
null代表不知道的值(an unknown value)或者不存在(a value does not exist),用于行中。
两个null值认为是一样的。
OR
(unknown or true) = true, (unknown or false) = unknown (unknown or unknown) = unknown
AND
(true and unknown) = unknown, (false and unknown) = false, (unknown and unknown) = unknown
NOT
(not unknown) = unknown
P is unknown 如果P是unknown,那么P is unknown的判断结果是true
如果值是unknown的话,那么值被认为不符合判断条件。
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键。 理解:超键是属性集,意味着一个列名可以是超键,几个列名也可以是超键 如:{customer_id, customer_name} and {customer_id} are both superkeys of Customer.
候选键(candidate key):不含有多余属性的超键称为候选键 理解:就是只有一个元素的超键。 如:{customer_id}或{customer_name}都是候选键
主码(primary key):用户选作元组标识的一个候选键程序主键 替换码(alternate Keys):那么其他的候选键就是替换码。 如:我们选择{customer_id}作为主码,那么{customer_name}就是候选码。反之一样
外码(foreign Key):一个关系r1中的一个属性或一组属性,与关系r2(可能相同)的候选键相匹配。 如:r1的外码是r2中主码。
只使用这些指令,那么意味着查询特定数据。 相应习题:https://blog.csdn.net/sandalphon4869/article/details/90516749#_225
基本代数名称代数符号作用select σ \sigma σ(sigma小写)选择行project: Π \Pi Π(pi大写)选择列union: ∪ \cup ∪行的并集,列相同set difference:–行的差集,列相同cartesian product: × \times ×行的笛卡尔积,列=R和S的和(不是并集)rename: ρ \rho ρ另命名 附加代数名称代数符号作用set-intersection ∩ \cap ∩行的交集,列相同natural-join ⋈ \bowtie ⋈自然连接:两表中相同属性中各个对应属性相同的去重属性笛卡尔积。division ÷ \div ÷除:表示结果是相关关系r的R-S的列,行是对于相同的r中的R-S列中的实体,其相关关系r中的S列在相关关系s的S列都有的行。assignment←赋值 扩展代数名称代数符号作用generalized project Π \Pi Π含有代算术运算的选择列聚合函数avgaverage valueminminimum valuemaxmaximum valuesumsum of valuescountnumber of values四大连接自然连接(内连接)natural join(inner join) ⋈ \bowtie ⋈只保留两者都共有的左连接left outer join ⊐ ⋈ \sqsupset \bowtie ⊐⋈保证左边关系的完整性右连接right outer join ⋈ ⊏ \bowtie \sqsubset ⋈⊏保证右边关系的完整性全连接full outer join ⊐ ⋈ ⊏ \sqsupset \bowtie \sqsubset ⊐⋈⊏保证两边关系的完整性格式:σp( r )
根据谓词p的选择条件,从相关关系r中挑选出符合条件的行。
谓词p
一个谓词条目(term):[列column/属性attribute] [操作符op(=, ≠, >, <, ≥, ≤)] [某个值] 多个谓词的链接: ∧(and), ∨ (or), ¬ (not)
例子
选择出A=B并且D的值大于5的行构成新的相关关系
格式: Π A 1 , A 2 , . . . , A 3 ( r ) \Pi_{A1,A2,...,A3}( r ) ΠA1,A2,...,A3(r)
从r中选择出特定的列(A1,A2,…,A3)构成新的相关关系 PS:自动去除重复的行,去重叫做(remove duplicate rows)
例子
格式:r ∪ s
求两个相关关系的并集:行的并集,列相同(行去重) PS:这两个相关关系必须有一样的属性/列
例子
格式:r−s
求两个相关关系的差集:行的差集,列相同 PS:这两个相关关系必须有一样的属性/列
例子:
格式:r X s
求两个相关关系的笛卡尔集
属性:
新生成的行数 = r的行数 * s的行数 新生成的列数 = r的列数 + s的列数
关系属性重名
要么
如果r ∩ s = 空集,那么可以直接r X s如果两个关系属性重名(r X r),则必须采用重命名机制(rename操作)加以区分,pd( r ),然后才能 r X d例子:
格式: ρ d ( r ) \rho_{d}( r ) ρd(r)
将相关关系r起名为d
格式: ρ d ( A 1 , A 2 , . . . , A n ) ( r ) \rho_{d(A1,A2,...,An)}( r ) ρd(A1,A2,...,An)(r)
将相关关系r起名为d,并将其内列名起名为A1,A2,…An。
行的交集,列相同
格式:r ∩ s
r1和r2有一样的列/属性
等价: r ∩ s = r – (r – s)
等价于set difference
r – s:(在r中)去掉s中特有的元素、保存r中特有的元素(去掉r、s中共有的元素) r –(r – s): (在r中)去掉r中特有的元素(保存r、s中共有的元素)
例子
格式:r ⋈ s
r和s的自然连接:两表中相同属性中各个对应属性相同的去重属性笛卡尔积。
等价: r ⋈ s = Π r . A , r . B , r . C , r . D , s . E ( σ r . B = s . B ⋁ r . D = s . D ( r × s ) ) r \bowtie s = \Pi_{r.A,r.B,r.C,r.D,s.E} (\sigma_{r.B=s.B \bigvee r.D=s.D}(r \times s)) r⋈s=Πr.A,r.B,r.C,r.D,s.E(σr.B=s.B⋁r.D=s.D(r×s))
等价于project, select, cartesian product
σ r . B = s . B ⋀ r . D = s . D ( r × s ) \sigma_{r.B=s.B \bigwedge r.D=s.D} (r \times s) σr.B=s.B⋀r.D=s.D(r×s):r和s的笛卡尔积,选择B、D分别同值的行 r.Ar.Br.Cr.Ds.Bs.Ds.Eα1αa1aαα1αa1aγα1γa1aαα1γa1aγδ2βb2bδ Π r . A , r . B , r . C , r . D , s . E ( σ r . B = s . B ⋀ r . D = s . D ( r × s ) ) \Pi_{r.A,r.B,r.C,r.D,s.E} (\sigma_{r.B=s.B \bigwedge r.D=s.D}(r \times s)) Πr.A,r.B,r.C,r.D,s.E(σr.B=s.B⋀r.D=s.D(r×s)):去掉一个B、D列 r.Ar.Br.Cr.Ds.Eα1αaαα1αaγα1γaαα1γaγδ2βbδ例子
格式:r ÷ s
等价:
设R = (A1, …, Am , B1, …, Bn ),S = (B1, …, Bn) 则 r ÷ s = Π R − S ( r ) – Π R − S ( ( Π R − S ( r ) ) × s – Π R ( r ) ) r \div s = \Pi_{R-S}(r) – \Pi_{R-S}((\Pi_{R-S}(r)) \times s – \Pi_{R}(r)) r÷s=ΠR−S(r)–ΠR−S((ΠR−S(r))×s–ΠR(r))
等价于project, set difference, cartesian product
表示结果是相关关系r的R-S的列,行是对于相同的r中的R-S列中的实体,其相关关系r中的S列在相关关系s的S列都有的行。
比如: 相关关系r的R-S的列就是α、β、γ、δ、ε, 行就是α在r中有1、2,3,都有s中的1、2;β在r中有1、2,都有s中的1、2;γ在r中有1,缺少s中的2;δ在r中有1、3,4,缺少s中的2;ε在r中有1、6,缺少s中的2。 所以只有α、β符合。
Π R − S ( r ) \Pi_{R-S}( r ) ΠR−S(r) Aαβγδε ( Π R − S ( r ) ) × s (\Pi_{R-S}(r)) \times s (ΠR−S(r))×s ABα1α2β1β2γ1γ2δ1δ2ε1ε2 ( Π R − S ( r ) ) × s – Π R ( r ) (\Pi_{R-S}(r)) \times s – \Pi_{R}(r) (ΠR−S(r))×s–ΠR(r) ABγ2δ2ε1 Π R − S ( ( Π R − S ( r ) ) × s – Π R ( r ) ) \Pi_{R-S}((\Pi_{R-S}(r)) \times s – \Pi_{R}(r)) ΠR−S((ΠR−S(r))×s–ΠR(r)) Aγδε r ÷ s = Π R − S ( r ) – Π R − S ( ( Π R − S ( r ) ) × s – Π R ( r ) ) r \div s = \Pi_{R-S}(r) – \Pi_{R-S}((\Pi_{R-S}(r)) \times s – \Pi_{R}(r)) r÷s=ΠR−S(r)–ΠR−S((ΠR−S(r))×s–ΠR(r)) Aαβ例子
t e m p 1 ← Π R − S ( r ) temp1←\Pi_{R-S}(r) temp1←ΠR−S(r)
格式: Π F 1 , F 2 , . . . , F n ( r ) \Pi_{F1,F2,...,Fn}( r ) ΠF1,F2,...,Fn(r)
一般化投影generalized projection是投影projection的扩展,是带上了算术运算的。 F表示A之间的算术运算,比如F = A1+A2
格式: Π F 1 a s X , F 2 , . . . , F n ( r ) \Pi_{F1 \ as \ X,F2,...,Fn}( r ) ΠF1 as X,F2,...,Fn(r)
还可以把F1的列起名为X。
例子:
Π c u s t o m e r _ n a m e , ( l i m i t − c r e d i t _ b a l a n c e ) a s c r e d i t _ a v a i l a b l e ( c r e d i t _ i n f o ) \Pi_{customer\_name, (limit-credit\_balance) \ as \ credit\_available}(credit\_info) Πcustomer_name,(limit−credit_balance) as credit_available(credit_info)
格式:
参数含义理解EE is any relational-algebra expression相关关系GG1, G2 …, Gn is a list of attributes on which to group (can be empty)列/属性(分组依据)FEach Fi is an aggregate function聚合函数AEach Ai is an attribute name列/属性aggregate functions
聚合函数含义avgaverage valueminminimum valuemaxmaximum valuesumsum of valuescountnumber of values例子
左连接、右连接、全连接都是在自然连接的基础上发展的,对于没有的值,用null值代替。 保证表示左边的相关关系里的共有列里的行都在结果中。
习题:https://blog.csdn.net/sandalphon4869/article/details/90516749#_311
格式: r ← r ∪ E r←r \cup E r←r∪E
格式: r ← r − E r←r - E r←r−E
只能删除整个元组(整行);不能只删除特定属性上的值(一行中的某个值)
格式: r ← Π F 1 , F 2 , . . . , F n ( r ) r←\Pi_{F1,F2,...,Fn} (r) r←ΠF1,F2,...,Fn(r)