5.2 数据库的实施与运行
5.2.1.数据查询
一.单表查询
在单表查询中,查询优化前后一致,故不需要查询优化。 1 查询售票部门的信息 Select *
From 售票部门
;
2 查询售票员编号
Select 售票员编号
From 售票部门 ) ;
其关系代数表达式为π( 售票员编号)
3 查询编号为532的售票员工资 Select 工资 From 售票员 Where 编号=532 ;
其关系代数表达式为π
工资(
δ
编号=532(售票员)
)
4 查询编号为533的售票员所在售票部门编号 Select部门编号
From 售票部门S1&售票员S2 Where S1姓名=S2姓名 And S2工作编号=533 ;
其关系代数表达式为π
5 查询各种票的价格 Select票价 From 售票
部门编号
(δ
工作编号=533(售票部门∞售票员)
)
;
6 查询2010年4月8日上海售出票的数量 Select 售票数量
From 购票旅客&订票旅客 Where购票编号=订票编号
And 购票地点=上海 售票时间=2010年4月8日 ) ; 其关系代数表达式为π
(售票数量
δ
购票编号=订票编号( 购票旅客∞订票旅客))
二.嵌套查询
在介绍嵌套查询之前,我们先介绍查询树的启发式优化。启发式规则的代数优
化是对关系代数表达式的查询树进行优化的方法。典型的启发式规则有:
1选择运算尽可能先做。2把投影运算和选择运算同时进行。3把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段二扫描一遍关系。4把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡尔积省很多时间。5找出公共表达式。
下面本文将订票数量进行嵌套查询并画出优化树:
例: )查询注册用户编号为5576的用户在截止2010年6月13日订票数量
Select 订票数量 From 订票旅客
Where 订票时间<=2010年6月13日and票的编号= ( Select 票的编号
From 网上订票旅客 Where 注册编号=5576 ) ) ;
其查询优化过程如下:
1)查询优化前:
关系代数表达式为
π
订票数量
(δ
注册编号=5576 ∧订票时间<=2010,6,13 (订票旅客∞网上订票旅
客)
)
δ
π
2)查询优化后的关系代数表达式为:
π 订票数量(π
编号
票的编号()∞ 注册用户=5576(订票旅客)
票的
(δ
订票时间<=2010,06,13
(网上订票旅客)))
查询优化前关系代数语法树与查询优化后的查询树如下:
π订票数量 δ订票编号=5576 X δ订票时间<=2010,06,13 网上订票旅客 订票旅客
查询优化前的语法树:
π订票数量 X δ订票时间<=2010,06,13 δ注册编号=5576 网上订票旅客 订票旅客