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

硅谷探秘者 2528 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 3193 据库中挑选出符合声明数据,而不是像传统编程思维去指示计算机如何操作。所以最关键一点是:SQL并不按照sql一般来说sql是: SELECT[DISTINCT]
数据库基础 1429 在看这篇文章之前相信你对sql已经有了足够认识。如果还不了解sql请点击sqlhttp://www.jiajiajia.club
weblog 1144 java使用原生jdbc连接数据库获取数据或sql句(mysql) publicvoidtest2(){ try{ //加载MySql驱动类 Class.forName
数据库 292 ,1warning(0.01sec)从计划中可以看出,该sql是文件排,排字段没有添加任何索引。  为什么文件排会出现这种问题呢?主要还是取决与filesort
数据库 253 建数据库sql句showcreatedatabase`test2`;查看创建数据表sql句showcreatetable`dept`;查看mysql版本SELECTVERSION()查看当前登录
数据库 530 sql句要分开,不能放在同一个sql句中:例如UPDATEusersetuuid=REPLACE(UUID(),"-","");这样生成uuid会是同一个。
数据库基础 2414 mysql按照中文拼音排对于存储字段采用是GBK字符集情况:orderbynameasc/desc对于存储字段采用是utf-8字符集情况:orderbyconvert(nameusinggbk)asc/desc
数据库 287 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月  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio
目录
祝愿神州十三飞行乘组平安归来