SQL结构化系列一、基础知识

简介: 一、术语关键词(Lexis)关键词是一组预定义的单词,为系统内置,区别于变量(Variable)。语法(Syntax)关键词、变量的摆放顺序语义(Semantics)由关键词和语法共同表达出的含义,即语言的含义。在编程语言中,通常不考虑修辞等语用信息。词法分析给定一段文本,建立文本中的单词和关键词/变量之间的映射的过程。产生符号表(Token List)图 1.1 词法分析示意图语法分析将词法分析

一、术语

  • 关键词(Lexis)
  • 关键词是一组预定义的单词,为系统内置,区别于变量(Variable)。
  • 语法(Syntax)
  • 关键词、变量的摆放顺序
  • 语义(Semantics)
  • 由关键词和语法共同表达出的含义,即语言的含义。在编程语言中,通常不考虑修辞等语用信息。
  • 词法分析
  • 给定一段文本,建立文本中的单词和关键词/变量之间的映射的过程。产生符号表(Token List)

图 1.1 词法分析示意图

  • 语法分析
  • 将词法分析的产物与语法关联的过程。产生抽象语法树(Abstract Syntax Tree)
  • 抽象语法树:一种基于多叉树的数据结构,定义了SQL语句中,关键词(Lexis)的摆放顺序,即:语法(Syntax)

图 1.2 语法分析示意图

  • 终结符集合: 一个有限集合,其元素称为  终结符(terminal); 编程语言中,将保留词定义为终结符。
  • 非终结符集合:一个有限集合,与终结符集合无公共元素,其元素称为  非终结符(non-terminal);
  • 语义分析
  • 基于抽象语法树和预定义的分析原则,也称为语言规范、产生式等,对语法树进行的遍历,通常产生与语法分析输入的文本不同类型的另一种语言。
  • 上下文无关的分析:在实现上即基于 上下文无关的产生式 ,对抽象语法树进行遍历,根据产生式决定同时参考的节点数量,生成目标语言的过程。一段语义可能需要多个关键词和非关键词进行组合才可以表达,因此有时需要参考抽象语法树的子树才可以确定语义。
  • SQL语法是上下文无关文法
    • 用常见的select子句的产生式为例:

querySpecificationNointo ⇒ SELECT selectSpec* selectElements fromClause? groupByClause? havingClause windowClause? orderByClause? limitClause?;

  • 产生式的右侧为: querySpecificationNointo 是( 非终结符 ),描述了一段语义;
    • 表达式右侧不包含SQL关键字( 终结符 );

图 1.3 语义分析示意图

  • 执行方案(Execution Plan)
  • 执行方案是执行引擎的运行时配置文件,程序读取执行方案,对执行方案进行解释--执行对应指令,产生目标数据。
  • 在执行之前,可以利用各种策略,进行执行方案的优化。

二、SQL 执行过程

2.1 SQL执行步骤

  • SQL执行本质上是将SQL语句翻译成执行方案,再由执行引擎读取执行方案进行执行文件操作、计算的过程。
  • 具体来讲,包含词法分析(Lexical Analysis)、语法分析(Syntax Analysis)、语义分析(Semantic Analysis)、执行方案生成(Execution Plan Generation)、执行方案优化(Execution Plan Optimization)等阶段。

2.2 关键阶段

  • 其中,难度较大的步骤是 语义分析 执行方案优化
    • 语义分析是整个流程中,第一次将输入的语言翻译为另外一种语言的过程。
    • 由于语言之间的转译并不是一一对应的关系,在语言翻译时,需要综合考虑,调整单词的顺序、减少单词数量等。
    • 举一个不恰当的例子,比如汉语“我 来自 中国。”翻译成英语“I come from China.”两句话表达了相同的语义,汉语用到了3个单词,英语用到了4个,因此在翻译时需要综合考虑。编程语言的转译过程与此类似,只不过编程语言没有修辞手法并且语法固定,比较适合用形式化的产生式进行描述,进而实现自动化翻译(即,编译)。
  • 执行方案优化是按照各种场景构造优化策略加以解决的问题,并无通法。
  • 比如常见的where子句优化:where a.id = 1 and 1 = 1   where true;执行计划优化时,此where子句会被删去,因为它并没有对最终结果产生任何影响。

2.2 AST Visitor

  • AST Visitor是对SQL抽象语法树进行访问的工具,方便我们对抽象语法树进行遍历,在遍历语法树节点时作相应的动作,即副作用,是生成执行方案的基础。

参考资料

SQL解析工具库

  • druid中的抽象语法树和Visitor是预先构造好的。
  • Apache calcite:用于构建数据库和数据管理系统的开源框架。它包括一个SQL解析器,基于关系代数构建表达式的API和查询计划引擎。

编译原理学习

相关文章
|
SQL 关系型数据库 MySQL
MySQL实战基础知识入门(2):统计一天24小时数据默认补0的sql语句
MySQL实战基础知识入门(2):统计一天24小时数据默认补0的sql语句
740 0
|
3月前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
59 1
|
3月前
|
SQL 关系型数据库 MySQL
|
6月前
|
SQL 数据采集 JSON
弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
125567 137
|
6月前
|
SQL Oracle 关系型数据库
Oracle PL/SQL基础知识及应用案例
Oracle PL/SQL基础知识及应用案例
117 0
|
SQL 关系型数据库 MySQL
MySQL实战基础知识入门(8):当天和昨天24小时数据统计的sql语句解决方案
MySQL实战基础知识入门(8):当天和昨天24小时数据统计的sql语句解决方案
423 0
MySQL实战基础知识入门(8):当天和昨天24小时数据统计的sql语句解决方案
|
SQL 关系型数据库 MySQL
[MySQL] SQL 基础知识
[MySQL] SQL 基础知识
|
SQL NoSQL 数据库
数据库SQL Server 基础知识思维导图
数据库SQL Server 基础知识思维导图
236 0
|
SQL 数据库
SQL注入基础知识(自己的笔记)
这是0xThrL的GD师傅在学习SQL注入时候写的笔记 ,也是希望可以帮助到大家,有什么问题希望各位师傅可以指出。
111 0
|
SQL Oracle 关系型数据库
SQL语言基础知识(二)
向员工表中插入一条记录,要求符合以下条件
156 0