首页 存档 技术 查看内容

好书一起读(167):重学数据库之查询

2018-3-30 13:00 |来自: 互联网 304 0

摘要: 读《数据库系统实现》来巩固数据库基础。 数据库三大要点:持久,查询,事务。这篇说查询。 查询的话题对应的是书的第67两章。查询处理的本质是查询进、数据出。又分为两个阶段,一是编译阶段,查询进、物理计划出 ...

《数据库系统实现》来巩固数据库基础。


数据库三大要点:持久,查询,事务。这篇说查询。


查询的话题对应的是书的第67两章。查询处理的本质是查询进、数据出。又分为两个阶段,一是编译阶段,查询进、物理计划出,二是执行阶段,物理计划进,数据出。


编译阶段的查询进、物理计划出,又分为三个步骤,一是分析,查询进、语法树出,二是查询重写,语法树进、逻辑树出,三是物理计划生成,逻辑树进、物理计划出。


这是典型的编译过程,三个步骤可以分别看做语法分析、优化和目标代码生成,生成的「目标代码」就是可以被执行的物理计划。


执行阶段将执行使用关系代数表达的查询。关系代数操作符包括并交差、选择、投影、乘积、连接、消除重复、分组和排序。SQL中的关系是包,同样的元组可以在一个关系中多次出现。




写在后面:


查询的过程,先将高级语言SQL编写的查询语句编译成能被执行的目标代码即物理计划,再执行这个物理计划以达到目的。先编译,再执行,非常容易理解。


查询的特殊之处在于它要处理的数据的格式是装着元组的集合,这使得物理计划本身一定是一系列对集合的操作的序列。这些操作,对应的就是关系代数的操作符。


SQL语言编写的查询语句,是用高级语言的方式定义这些操作,所以当我们看到关系代数操作符如选择、投影等等,很容易想到它们在SQL中的表示方法。


数据库的表,给我们的直观感受是其形式是二维表,但如果总是记得其实质是装着若干元组的集合,每个步骤的实质都是输入一(或多)个集合,输出另一个集合,对SQL的执行的理解就会很容易理解。


比如一个集合包括(张三,男)和(李四,男)两个元组,对之施加where name = '张三'的操作,得到一个新集合,包括(张三,男)一个元组,这就是选择。


比如一个集合包括(张三,男)和(李四,男)两个元组,对之施加select name的操作,得到一个新集合,包括(张三)和(李四)两个元组,这就是投影。


SQL的本质是一个过程,施加在数据之上,获得另一种形式的数据。


Java的MyBatis框架,本质是声明一个方法(Java中的过程),方法签名由Java编写,方法体由SQL编写,达到两种编程模型(对象和关系)的融合的目的。


Hibernate做的是同样的事,让类和表,对象和记录融合,以达到在程序中只要操作对象,就能自动转化为操作记录的目的。这就是ORM。


你在Java语言里声明一个List

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部