数据库SQL执行顺序详解
SQL语句执行顺序
为什么要了解SQL?
- Ans1: 动态网页靠的是什么, 是数据库中的数据啊. 只有精通数据库才有可能称为开发大佬.
- Ans2: SQL就是操作数据库的标准语句, 所以玩转SQL是重要的前提. 别说啦, 赶紧把下面的内容拿走.
SQL执行说明
首先摘抄一段特别经典的SQL语句.
(1) SELECT (2)DISTINCT<select_list> (3) FROM <left_table> (4) <join type> JOIN <right_table> (5) ON <join_condition> (6) WHERE <where_condition> (7) GROUP BY <group_by_list> (8) WITH {CUBE|ROLLUP} (9) HAVING <having_condition> (10) ORDER BY <order_by_condition> (11) LIMIT <limit_number>
执行顺序分析,排序靠前的最先执行 :
- FROM : 首先左边的表<left_table>和右边的表<right_table>先进行笛卡尔运算 .举个栗子:<left_table>中有m条记录,<right_table>中有n条记录,那么会产生一个m*n个的虚拟表VT1(virtual table);
- ON : 符合连接条件<join_condition>的记录会被保留下来,我们暂且称之为VT2;
- JOIN : 如果指定了连接类型(左连接,右连接),那么保留表中未匹配的记录作为外部行添加到虚拟表VT2,形成VT3;
- WHERE : 对虚拟表VT3进行条件过滤,记录满足条件<where_condition>才会执行下一步,此时的虚拟表称它为VT4;
- GROUP BY : 对VT4按照GROUP BY的列进行分组,形成VT5;
- WITH : 对VT5进行CUBE或ROLLUP操作,产生表VT6;
- HAVING : 对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入到VT7;
- SELECT : 执行SELECT操作,选择指定的列,形成VT8;
- DISTINCT: 去除重复,产生虚拟表VT9;
- ORDER BY: 将虚拟表VT9中的记录按照排序字段<order_by_list>进行排序操作,产生虚拟表VT10;
- LIMIT: 取出指定行的记录,产生虚拟表VT11,并返回给查询用户.
补充 :
- 如果查询表的数量超过两个,那么可以把得到的VT3表当成已知表和下一个表重复步骤1-3,最后形成一个新的NVT3,接着进行操作;
- WITH : 中{CUBE|ROLLUP} : 通常和group by 语句一起使用,是根据维度在分组的结果集中进行聚合操作。——对group by的分组进行汇总。其和Order By互斥.
数据库SQL执行顺序详解相关推荐
- MySQL系列---架构与SQL执行流程详解
文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...
- unity 继承会调用start吗_Unity 继承MonoBehaviour脚本 执行顺序 详解
先看结果 Awake ->OnEnable-> Start ->-> FixedUpdate-> Update -> LateUpdate ->OnGUI ...
- MySQL--SQL执行顺序详解
SQL执行顺序 (8)SELECT(9)DISTINCT <select_list> (1)FROM <left_table> (3)<join_type> JOI ...
- mysql的sql执行计划详解
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈. explain执行计划包含的信息 其中最重要的字段为:i ...
- 随笔:数据库SQL执行顺序
2021年11月20日 周六 写于 上海 和平公园 刚刚还小激动了一下,看到消息上有一个关注,赶紧翻看了一下,才发现还是2019年的一位朋友的关注,顿时归于平静.如果有人关注我,我还是愿意写一 ...
- 【异步系列二】Promise原理及执行顺序详解
前言 Promise 是 javascript 中非常重要的一环,熟悉它是必须的,而且在面试中也常常会问到相关面试题. 在了解 Promise 之前,需要了解什么是异步编程,可以参考我的一篇文章:Ja ...
- 数据库SQL执行顺序
数据库中SQL的执行顺序如下: (8)SELECT (9)DISTINCT (11)<Top Num> <select list> (1)FROM [left_table] ...
- java try、catch、finally及finally执行顺序详解
1.为什么要用finally 先看一个没有finally的异常处理try-catch语句: 假设count为要使用到的资源,并且用完要求释放此资源.那么我们可以把释放资源的语句放到try-catch后 ...
- Python装饰器执行顺序详解
探究多个装饰器执行顺序 装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思. 疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会 ...
最新文章
- Spring面试五连问,这怎么顶啊
- matlab 数组元素连乘积prod
- Labview 属性节点讲解
- JQUERY项目所用插件
- leetcode 316. 去除重复字母(单调栈)
- libpcap 库使用(二)
- 曾遭周鸿祎全网封杀的 360 猛将 :草根打工到 36 岁身家上亿的逆袭!
- 【给你几个使用Xamarin的理由】
- File Manager所支持的文件
- 职高计算机基础知识大全,职高计算机基本教学大纲.doc
- C语言从字符串中提取数字
- 【科创人独家】华旦天使张洁:风口是创业者的造物,投资本质是件农活
- [原创] 仿滴滴出行打车APP定位导航,增加RFID认证、海外版、司机证件号码识别功能
- 行走在思想的边上――武墩支教十二月(上)
- 黑色温敏性PNIPAM-AuNPs/CHOL-AuNPs纳米金粒修饰聚合物的制备过程
- 零基础 学 python开发 (Genius套餐A) 四十一
- php和html的关系
- GO富集分析相关概念
- 百度ECharts插件 立体地图阴影实现带轨迹连接
- mysql不可重复读是锁的表吗_Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...