2.2 查询编译器 查询处理器需采取三个主要步骤: http://www.paper51.com 1)对使用诸如SQL的某种语言书写的查询进行语法分析,亦即将查询语句转换成按某种有用方式表示查询语句结构的语法树; paper51.com 2)把语法分析树转换成代数关系表达式树(或某种类似标记),称之为逻辑查询计划; 内容来自论文无忧网 www.paper51.com
3)逻辑查询计划需转换成物理查询计划,物理查询计划不仅指名了要执行的操作,而且也找出了这些操作执行的顺序、执行每步所用的算法、获得所存储数据的方式以及数据从一个操作传递给另一个操作的方式。 内容来自www.paper51.com 查询编译的开始几个阶段如图所示: paper51.com 图1 查询编译的阶段图 http://www.paper51.com 1. 语法分析与语法分析树 内容来自www.paper51.com
语法分析器的工作是接收用类似SQL这样的语言编写的文本并将之转换成语法分析树,结点对应于以下两者之一: 内容来自www.paper51.com 1)原子:它们是词法成分,如关键字(如SELECT等)、关系或属性的名字、常数、括号、操作符(如+等),以及其它成分; 内容来自论文无忧网 www.paper51.com 2)语法类:即在一个查询中起相似作用的查询子成分所形成族的名字。可以用尖括号将描述性的名称括起来表示语法类。例如,<SFW>用于表示以常用的select-from-where形式的查询,而<Condition>将用于表示属性条件的任何表达式,如跟在SQL语句where之后的表达式。 http://www.paper51.com 如果结点是一个原子,则该结点没有子女。然而,若该结点是一个语法类,则其子女通过该语言的语法规则之一进行描述。 http://www.paper51.com
1. SQL的一个简单子集的语法 paper51.com 通过给出可用于SQL子集的语言的某些规则,我们借此说明语法分析树的过程。 内容来自www.paper51.com 1)查询 paper51.com 语法<Query>用于表示所有正则SQL查询语句。它的一些语法规则是: http://www.paper51.com <Query> ::= <SFW> 内容来自www.paper51.com <Query> ::= (<Query>) paper51.com ::=符号表示“可以表述为”。 内容来自www.paper51.com 2)Select列表 内容来自论文无忧网 www.paper51.com <SelList> ::= <Attribute> ,<SelList> 内容来自www.paper51.com <SelList> ::= <Attribute> paper51.com
这两条规则说明一个选择列表可以为任何由逗号分隔的属性列表:要么是单个属性,要么是一个属性、一个逗号以及一个或多个属性的任意列表。 http://www.paper51.com 3)From列表 http://www.paper51.com <FromList> ::= <Relation> ,<FromList> http://www.paper51.com <FromList> ::= <Relation> paper51.com 这里的from列表可由任意用逗号分隔的关系列表组成。 copyright paper51.com 这里只列出了部分规则,其他的规则请参考其他的书籍。 内容来自论文无忧网 www.paper51.com 我们来看这样一个查询语句: http://www.paper51.com SELECT title paper51.com FROM StarsIn http://www.paper51.com
WHERE starName IN 内容来自论文无忧网 www.paper51.com ( 内容来自www.paper51.com SELECTname paper51.com FROMMovieStar 内容来自www.paper51.com WHEREbirthdate LIKE ‘%1960’ copyright paper51.com
); copyright paper51.com 按照我们所描绘的语法,此查询语句的语法分析树如下所示 paper51.com |