关系运算
关系代数运算符有集合运算符、专门的关系运算符、算术比较符和逻辑运算符,如下:
并(Union)
关系R与S的并由属于R或属于S的元组构成的集合组成,定义为R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t|t\in R \vee t\in S\}R∪S={t∣t∈R∨t∈S},t为元组变量,R与S具有相同的关系模式(结构相同)。
等价SQL:
SELECT A,B,C FROM R UNION SELECT A,B,C FROM S;
差(Difference)
等价SQL:
SELECT A,B,C FROM R EXCEPT SELECT A,B,C FROM S;
交(Intersection)
等价SQL:
SELECT A,B,C FROM R INTERSECT SELECT A,B,C FROM S;
笛卡尔积(Extended Cartesian Product)
两个元数分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是
等价SQL:
SELECT * FROM R CROSS JOIN S;
投影(projection)
等价SQL:
SELECT A,C FROM R;
选择(Selection)
选择运算是从关系的水平方向
进行运算,是从关系R中选择满足给定条件的诸元组,形式定义为
等价SQL:
SELECT A,B,C FROM R WHERE A>B;
除(Division)
除运算是同时从关系的水平方向和垂直方向进行运算。给定关系R(X,Y)和S(Y,Z),X、Y、Z为属性
等价SQL:
SELECT * FROM R CROSS JOIN S WHERE R.A<S.B;
等价SQL:
SELECT R.A,R.B,R.C,R.D FROM R,S WHERE R.A=S.A AND R.C=S.C;
要求两个关系中进行比较的分量必须是相同的属性组并且在结果集中将重复属性列去掉。
外连接(outer join)
外连接是连接运算的扩展,可以处理缺失的信息。
- 左外连接(left outer join)。取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值null填充所有来自右侧关系的属性。
等价SQL:
SELECT R.A,R.B,R.C,S.D FROM R LEFT JOIN S ON R.B=S.B AND R.C=S.C;
- 右外连接(right outer join)。取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值null填充所有来自左侧关系的属性。
等价SQL:
SELECT R.A,S.B,S.C,S.D FROM R RIGHT JOIN S ON R.B=S.B AND R.C=S.C;
完全外连接(full outer join)。完成左外连接和右外连接的操作。既填充左侧关系中所有与右侧关系中任一元组都不匹配的元组,又填充右侧关系中所有与左
- 侧关系中任一元组都不匹配的元组,将产生的新元组加入自然连接的结果中。
等价SQL:
SELECT R.A,R.B,R.C,S.D FROM R LEFT JOIN S ON R.B=S.B AND R.C=S.C UNION SELECT R.A,S.B,S.C,S.D FROM R RIGHT JOIN S ON R.B=S.B AND R.C=S.C;
聚集函数
聚集函数输入一个值的集合,返回单一值作为结果。如集合12,4,6,8,10,15}。将聚集函数sum用于该集合时返回和45;将聚集函数avg用于该集合时返回平均值7.5;将聚集函数count用于该集合时返回集合中元数的个数6;将聚集函数min用于该集合时返回最小值2;将聚集函数max用于该集合时返回最大值15。
元组演算
查询优化
查询处理是从数据库中提取数据的一系列活动。
查询处理的代价:总代价=I/O代价+CPU代价+内存代价(多用户环境)。
查询优化:为查询选择最有效的查询计划的过程。
优化的准则:
- 提早执行选取运算。
- 合并乘积与其后的选择运算为连接运算。
- 将投影运算与其后的其他运算同时进行,以避免重复扫描关系。
- 将投影运算和其前后的二木运算结合起来,使得没有必要为去掉某些字段再扫描一遍关系。
- 在执行连接前对关系做适当的预处理,就能快速地找到要连接的元组。方法有两种:索引连接法、排序合并连接法。
- 存储公共子表达式。