sql的语法顺序和执行顺序

weblog 3846 0 0
SQL 是一种声明式语言

        SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果。SQL 语言声明的是结果集的属性,计算机会根据 SQL 所声明的内容来从数据库中挑选出符合声明的数据,而不是像传统编程思维去指示计算机如何操作。所以最关键的一点是:SQL 的语法并不按照语法顺序执行。

sql的语法顺序

一般来说sql的语法顺序是:

  1. SELECT [DISTINCT]
  2. FROM
  3. JOIN
  4. ON
  5. WHERE
  6. GROUP BY
  7. HAVING
  8. UNION
  9. ORDER BY
  10. LIMIT 
sql的解析顺序
  1. FROM FROM后面的表标识了这条语句要查询的数据源。和一些子句如,(1.1)笛卡尔积,(1.2)ON过滤,(1.3)添加外部列,所要应用的对象。FROM过程之后会生成一个虚拟表VT1。
    1.  笛卡尔积 这个步骤会计算两个相关联表的笛卡尔积(CROSS JOIN) ,生成虚拟表VT1-J1。 
    2. ON过滤 这个步骤基于虚拟表VT1-J1这一个虚拟表进行过滤,过滤出所有满足ON 谓词条件的列,生成虚拟表VT1-J2。
    3. 添加外部行  如果使用了外连接,保留表中的不符合ON条件的列也会被加入到VT1-J2中,作为外部行,生成虚拟表VT1-J3。
  2. WHERE 对VT1过程中生成的临时表进行过滤,满足where子句的列被插入到VT2表中。 
  3. GROUP BY 这个子句会把VT2中生成的表按照GROUP BY中的列进行分组。生成VT3表。
  4. 聚合函数
  5. HAVING 这个子句对VT3表中的不同的组进行过滤,满足HAVING条件的子句被加入到VT4表中。 
  6. SELECT 这个子句对SELECT子句中的元素进行处理,生成VT5表。
    1. 计算表达式 计算SELECT 子句中的表达式,生成VT5-1 。
    2. DISTINCT 寻找VT5-1中的重复列,并删掉,生成VT5-2 。
    3. TOP 从ORDER BY子句定义的结果中,筛选出符合条件的列。生成VT5-3表 
  7. ORDER BY 从VT5-3中的表中,根据ORDER BY 子句的条件对结果进行排序,生成VC6表。
  8. limit  m,n:从第(m+1)条开始,显示n条记录。

 


猜你喜欢
数据库基础 3189 从数据库中挑选出符合声明数据,而不是像传统编程思维去指示计算机如何操作。所以最关键一点是:SQL并不按照。2.sql一般来说sql是:SELECT[DISTIN
数据库基础 2240 在看这篇文章之前相信你对sql已经有了足够认识。如果还不了解sql请点击sqlhttp://www.jiajiajia.club
weblog 2502 java使用原生jdbc连接数据库获取数据或sql句(mysql) publicvoidtest2(){ try{ //加载MySql驱动类 Class.forName
java虚拟机(jvm) 3095 编译:“一次编译、到处运”说是Java言跨平台特性,Java跨平台特性与Java虚拟机存在密不可分,可在不同环境中运。比如说Windows平台Linux平台都有相应JDK,安装好
spring/springmvc 4575 springmvc项目启动时controller在springmvc配置文件中加入controllerbean,注意bean加载beanclass
javascript,前端 1143 jsjavascriptforinforof区别,forof遍历原理 一、区别 forin是ES5,forof是ES6forin是无遍历数组或对象,也就是随机遍历,不按照
数据结构与算法 1412 思想:把所有需要排数据分成两个集合,一个是待排集合,一个是已排集合,算每次从未排集合或随机拿取一个数据,把它加入到已排集合使其有,直到未排集合中数据被取走完,算结束
数据库 1195 ,1warning(0.01sec)从计划中可以看出,该sql是文件排,排字段没有添加任何索引。  为什么文件排会出现这种问题呢?主要还是取决与filesort
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。