sql的语法顺序和执行顺序 【mysql】

硅谷探秘者 3193 0 0

1.SQL 是一种声明式语言

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

        所以最关键的一点是:SQL 的语法并不按照语法顺序执行。

2.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 

3.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条记录。




评论区
请写下您的评论...
暂无评论...
猜你喜欢
weblog 3834 据库中挑选出符合声明数据,而不是像传统编程思维去指示计算机如何操作。所以最关键一点是:SQL并不按照sql一般来说sql是: SELECT[DISTINCT]
数据库基础 2240 在看这篇文章之前相信你对sql已经有了足够认识。如果还不了解sql请点击sqlhttp://www.jiajiajia.club
weblog 2502 java使用原生jdbc连接数据库获取数据或sql句(mysql) publicvoidtest2(){ try{ //加载MySql驱动类 Class.forName
数据库 1195 ,1warning(0.01sec)从计划中可以看出,该sql是文件排,排字段没有添加任何索引。  为什么文件排会出现这种问题呢?主要还是取决与filesort
数据库 1041 建数据库sql句showcreatedatabase`test2`;查看创建数据表sql句showcreatetable`dept`;查看mysql版本SELECTVERSION()查看当前登录
数据库 2782 sql句要分开,不能放在同一个sql句中:例如UPDATEusersetuuid=REPLACE(UUID(),"-","");这样生成uuid会是同一个。
数据库基础 3195 mysql按照中文拼音排对于存储字段采用是GBK字符集情况:orderbynameasc/desc对于存储字段采用是utf-8字符集情况:orderbyconvert(nameusinggbk)asc/desc
数据库 1485 MariaDB/MySQL中,主要有5种日志文件:1.错误日志(errorlog):记录mysql服务启停时正确错误信息,还记录启动、停止、运过程中错误信息。2.查询日志(generallog):
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。