关系代数
关系代数是针对关系模式所做的代数运算,在考试中基本上只出现几种,并集、交集、差集、笛卡儿积、投影、选择、连接几种,其它的运算在考试并不怎么涉及。
投影用π表示,表示选择哪些列,即select语句中展示的column name。
选择用σ(西格玛的小写)表示,表示选择哪一个元组行,即select展示的结果集的内容。
自然连接
是连接的运算,连接可以有多种,考试中考察较多的是自然连接,自然连接是特殊的等值连接,符号是⋈。自然连接的结果,从结果上看:
属性列个数是二者之和,减去重复列;
元组行个数是同时满足,相同属性列必须同时取值相等。
自然要做的两个事:
①自然连接的条件是存在同名属性列,有同名属性列,取值相等。首先属性上来看,同名属性列重复不需要记录。
②同名属性列在还原的过程当中,需要随之还原一些非主属性。非主属性一定是由同名属性列来决定,否则等值所取到的同名属性列不知道是谁取的。(即以同名属性列为左侧决定因素的函数依赖有一个保留下来了,保留下来的结果是可以随之还原右侧被决定的因素)
π1,2,3,5(σ1=4(S1×S2)),(S1×S2)先两个表做笛卡尔积,然后σ1=4筛选数据,然后投影π1,2,3,5,选择列进行展示。
σ1=4(π1,2,3,5(S1×S2)),(S1×S2)先两个表做笛卡尔积,然后投影π1,2,3,5,选择列进行展示,然后σ1=4筛选数据,这时,由于重复字段,所以4表示的是StuClass这个字段,不是S2的StuId,所以这个表达式是错的。
性能问题
①一般认为自然连接是优于笛卡尔积的
②在考虑提升SQL语句性能的时候,或者是关系代数新能的时候,会尽可能的取压缩运算表,也就是小表驱动大表,同时需要笛卡尔积的时候,尽可能在不影响结果的情况下,先进行数据筛选,减少笛卡尔积的数据量,从而提高性能。