SQL语言 | 青训营笔记

116 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天,今天把昨天没学完的扫了一下尾,都是很高级的内容,还需要在实践中慢慢学习

SQL语言:

1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。

语法风格接近自然语言;

高度非过程化;

面向集合的操作方式;

语言简洁,易学易用。

 

SQL引擎- Parser:

解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。

 

SQL Parser 的功能是把一条 SQL 解析为抽象语法树(AST),SQL Parser 需要编译原理相关的知识,简单介绍一下。

SQL Parser 包含词法解析(Lexer)和语法解析(Parser),词法解析的作用是把一个 SQL 分割成一个一个不可分割的单元

 

上下文无关语法和相关术语的定义:

 

终结符集合 T(terminal set)

 

一个有限集合,其元素称为 终结符(terminal)。

 

非终结符集合 N(non-terminal set)

 

一个有限集合,与 T 无公共元素,其元素称为 非终结符(non-terminal)。

 

符号集合 V(alphabet)

 

T 和 N 的并集,其元素称为 符号(symbol)。因此终结符和非终结符都是符号。符号可用字母:A,B,C,a,b,c 等表示。

 

符号串(a string of symbols)

 

一串符号,如 X1 X2 ... Xn 。只有终结符的符号串称为句子(sentence)。空串 (不含任何符号)也是一个符号串,用 ε 表示。符号串一般用小写字母 u, v, w 表示。

 

产生式(production)

 

一个描述符号串如何转换的规则。对于上下文本无关语法,其固定形式为:A -> u ,其中 A 为非终结符, u 为一个符号串。

 

产生式集合 P(production)

 

一个由有限个产生式组成的集合。

 

展开 (expand)

 

一个动作:将一个产生式 A -> u 应用到一个含有 A 的符号串 vAw 上,用 u 代替该符号串中的 A ,得到一个新的符号串 vuw 。

 

折叠 (reduce)

 

一个动作:将一个产生式 A -> u 应用到一个含有 u 的符号串 vuw 上,用 A 代替该符号串中的 u ,得到一个新的符号串 vAw。

 

起始符号 S(start symbol)

 

N 中的一个特定的元素。

 

推导(derivate)

 

一个过程:从一个符号串 u 开始,应用一系列的产生式,展开到另一个的符号串 v,若 v 可以由 u 推导得到,则可写成:u => v。

 

上下文本无关语法 G (context-free grammar, CFG)

 

一个 4 元组:(T,N,P,S) ,其中 T 为终结符集合, N 为非终结符集合, P 为产生式集合, S 为起始符号。一个句子如果能从语法 G 的 S 推导得到,可以直接称此句子由语法 G 推导得到,也可称此句子符合这个语法,或者说此句子属于 G 语言。G 语言 (G language) 就是语法 G 推导出来的所有句子的集合,有时也用 G 代表这个集合。

 

解析(parse)

 

也称为分析,是一个过程:给定一个句子 s 和语法 G ,判断 s 是否属于 G ,如果是,则找出从起始符号推导得到 s 的全过程。推导过程中的任何符号串(包括起始符号和最终的句子)都称为 中间句子(working string)。