SQL查询操作处理流程

SQL查询

  这里看到书上讲述SQL的查询处理,在SQL中查询是通过select语句以及一些辅助的子句来实现需要的输出,这里使用的是mysql,首先,要理解物理表和虚拟表的区别,物理表就是存储在文件系统上的一个或者多个文件,按照相应的存储数据结构将每一行的数据存储,虚拟表是我们在物理表的基础上构建出来的,可能是全部的表结构,也可能是表中的部分字段或者部分行,甚至可能是表中某些字段经过某种运算之后的结果。但是SQL语言不像C/C++/JAVA这类语言一样,它们的主要区别在于SQL给你一个需求,不关心它是怎么实现的,真正的实现由数据库完成,当然不同的数据库可能会有差别很大的实现方式,而C/C++这类的语言,我们必须一步步的实现,完成指定的功能。所以SQL的内部实现过程我们不用关心,但是对于查询请求,它的执行过程和执行顺序对我们对结果的认识有很大的影响,但是真正的执行过程需要深入数据库内部才能明白使用哪些方式(例如索引)优化,所以这里我们重点看一下查询请求每个子句的执行顺序。

  标准的SQL查询语句的结果如下所示:

 (8) SELECT x, xx, xxx, xxxx  \ 
 (9)      DISTINCT <x, xx,...> \
 (1)      FROM <table1, table2, table3,...>  \
 (3)      <join_type>JOIN<join_table>  \ 
 (2)      ON  <join_condition>   \
 (4)      WHERE  <where_condition>  \
 (5)      GROUP BY <group_by_list>  \
 (6)      WITH[CUBE | ROLLUP]   \
 (7)      HAVING  <having_condition>  \ 
 (10)    ORDER BY <order_by_list>   \
 (11)    LIMIT <limit_number> OFFSET <offset_number> ;

  每个子句执行的次序已经在前面进行了标记,在一一介绍这些子句之前,我们要先明白,执行这个命令的输入是这些表名、条件(ON、WHERE和HAVING)以及一些字段名(SELECT,DISTINCT、ORDER BY、GROUP BY),其中表名标识的是物理存储的表,字段名是每一个表的字段的名称,条件是针对字段的或者该字段上执行的聚集函数的值得逻辑表达式。这些子句的每一步都是产生一个逻辑关系表。

执行流程

FROM操作

  这一步的输入是多个表,在这一步是对多个关系表执行笛卡尔积操作,生成的结果是VT1,假设有3个表,t1、t2和t3,三个表分别有r1、r2、r3行&#

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值