SQL语法顺序与解析顺序

关于SQL的解析顺序,其实SQL的解析顺序和书写顺序是不一样的!!!

SQL:结构化查询语言

SQL是最重要的关系数据库操作语言,它是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL基本上独立于数据库本身、使用的机器、网络、操作系统。
SQL的影响已经超出数据库领域,得到其他领域的重视和采用,如人工智能领域的数据检索,第四代软件开发工具中嵌入SQL的语言等。

有很多程序员都很抵触SQL,其实SQL语言是一整为数不多的声明性语言,只是它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言。

SQL是一种声明式语言

首先我们应该记住这个概念“声明”,SQL语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果。

SQL 语言声明的是结果集的属性,计算机会根据SQL 所声明的内容来从数据库中挑选出符合声明的数据,而不是像传统编程思维去指示计算机如何操作。

类似于,简单粗暴的对电脑说,嘿,电脑,把你上个月存进去的所有销售记录给我调出来。电脑:上个月的记录有….

select * from pf_ckmx where rq >= '2016-12-23' and rq <= '2017-01-22'

我们并不关心这些数据是怎么得来的,我们只是看看结果而已。

为什么很多程序员都很抵触SQL呢,主要原因是:我们潜意识中的是按照命令式编程的思维方式思考问题的。就好像这样:“电脑,先执行这一步,再执行那一步,但是在那之前先检查一下是否满足条件 A 和条件 B ”。例如,用变量传参、使用循环语句、迭代、调用函数等等,都是这种命令式编程的思维惯式。而SQL恰恰没有按照这种命令式编程的思维方式来处理问题。

另外,最重要的是SQL的语法并不按照语法顺序执行的

SQL语句有一个让大部分人都感到困惑的特性,就是:SQL语句的执行顺序跟其语句的语法顺序并不一致。SQL语句的语法顺序是:

SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
为了方便理解,上面并没有把所有的 SQL 语法结构都列出来,但是已经足以说明 SQL 语句的语法顺序和其执行顺序完全不一样,就以上述语句为例,其执行顺序为:

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

可以发现:SQL的语法并是不按照语法顺序执行,这让我们习惯于命令式编程的思维惯式

关于SQL语句的执行顺序需要注意的地方

  1. FROM 才是 SQL 语句执行的第一步,并非 SELECT 。数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。
  1. FROM才是SQL语句执行的第一步,并非SELECT。数据库在执行SQL语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。
  1. SELECT是在大部分语句执行了之后才执行的,严格的说是在FROM和GROUP BY之后执行的。理解这一点是非常重要的,这就是你不能在WHERE中使用在SELECT中设定别名的字段作为判断条件的原因。

当然这一点并非所有的数据库对SQL语句使用相同的解析方式。如MySQL、PostgreSQL和SQLite

既然并不是所有的数据库都按照上述方式执行SQL预计,那有什么意义呢?

SQL语句的语法顺序和其执行顺序并不一致,这样我们就能避开一些一般性的错误,如果能记住SQL语句语法顺序和执行顺序的差异,那就已经可以轻松解决SQL的一些一般性问题了。

如果一种语言被设计成语法顺序直接反应其语句的执行顺序,那么这种语言对程序员是十分友好的,这种编程语言层面的设计理念已经被微软应用到了 LINQ 语言中

文章目录
  1. 1. SQL:结构化查询语言
  2. 2. SQL是一种声明式语言
  3. 3. 另外,最重要的是SQL的语法并不按照语法顺序执行的
  4. 4. 关于SQL语句的执行顺序需要注意的地方
  5. 5. 既然并不是所有的数据库都按照上述方式执行SQL预计,那有什么意义呢?
,