目录
一、σ、π、⋈
1.选择σ
2.投影π
3.连接⋈
二、 构建语法树
① 解读sql语句
② 写出关系代数表达式
③ 画出语法树
三、优化语法树
四、练习
语法树优化方法
一、σ、π、⋈
1.选择σ
选择就是在关系R中选择满足给定条件的诸元组。
通过条件Sdept='IS'选择出系别是IS的学生信息。
2.投影π
关系R上的投影是从R中选择出若干属性列组成新的关系。
选择出Sname、Sdept属性列组成新的关系。
通过两幅图对比可以看出,选择σ是从原表中选择出满足条件的行,投影π是从原表中选择出满足条件的列。
3.连接⋈
连接也称为θ连接。它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。
连接分为非等值连接,等值连接、自然连接。其中我们需要注意的是自然连接,理解自然连接是什么请参考文章:非等值连接、等值连接、自然连接-CSDN博客
二、 构建语法树
① 解读sql语句
通常考查语法树优化的都是多表查询。
章节一中说到,投影是从一个关系中选择出若干属性列组成新的关系,select语句部分描述的的是投影π。
where表示的条件可以分为两部分,一部分是题目真正想查询的结果,另一部分是多表连接的条件,where语句强调的是条件,也就是选择,章节一中说到选择就是在一个关系中选择满足给定条件的诸元组。所以where语句部分描述的是选择σ。
最后则剩下关系表的连接,表的连接在语法树中笛卡尔积,符号用 x 表示。
② 写出关系代数表达式
以书上如下例子,写出关系代数表达式:
此题中SC.Cno='2',是题目真正想查询的结果;而Student.Sno=SC.Sno则是两表连接的条件。
③ 画出语法树
有了关系表达式,我们就可以画出语法树,画语法树时有一个技巧:"由外到里,由上到下",由关系表达式最外面的括号开始一层层向里从上到下画出语法树。
三、优化语法树
语法树的优化实际上就是通过条件不断选择出一个更加细化的关系,再与另一个关系笛卡尔积连接,这样可以减少计算量。
当然书上用的等值连接,在笛卡尔积上加上条件用以选择,表达的意义与等值连接相同,理解即可。如果题目要求用等值连接,或者题目给出的关系代数表达式用的等值连接,那么画图也要用等值连接。
四、练习
书上例子较为简单,这里用一个稍微复杂一点的例子练习用以加深理解。
语法树优化也许各有各的方法,我的方法如下:
语法树优化方法
第一步:把题目想查询的结果的选择条件移动到对应关系模式前。
第二步:把表的连接条件拆开,移动到对应关系模式前。
第三步:在对应关系模式前,添加题目查询所需的列属性和连接条件的投影。