简单了解MySQL SELECT执行顺序
SELECT语句的完整语法为:
(7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) HAVING <having_condition> (9) ORDER BY <order_by_condition> (10) LIMIT <limit_number>
说明:语法前面的序号为SELECT执行顺序
MySQL的SELECT执行顺序一共分为10步,如上所标注的那样,最先执行的是FROM操作,最后执行的是LIMIT操作。其中每一次操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。
下面我们来具体分析一下查询处理的每一个阶段
SELECT a.customer_id, COUNT(b.order_id) as total_orders FROM table1 AS a LEFT JOIN table2 AS b ON a.customer_id = b.customer_id WHERE a.city = 'hangzhou' GROUP BY a.customer_id HAVING count(b.order_id) < 2 ORDER BY total_orders DESC;
1、FORM: 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1。
2、ON: 对虚表VT1进行ON过滤,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
3、JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3。
4、WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
5、GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5。
6、HAVING: 对虚拟表VT5应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT6中。
7、SELECT: 执行select操作,选择指定的列,插入到虚拟表VT7中。
8、DISTINCT: 对VT7中的记录进行去重。产生虚拟表VT8.
9、ORDER BY: 将虚拟表VT8中的记录按照<order_by_list>进行排序操作,产生虚拟表VT9.
10、LIMIT:取出指定行的记录,产生虚拟表VT10, 并将结果返回。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
mysql select语句操作实例
Select的语法 复制代码 代码如下: SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr, ...
-
php mysql实现mysql_select_db选择数据库
mysql_select_db介绍 mysql_select_db函数有两个参数: mysql_select_db(database,connection) 如果成功,则该函数返回 true.如果失败,则返回 false. 参数 描述 database 必需.需要选择的数据库. connection 可选.MySQL 连接.如果没有设置该参数,则表明使用上一个mysql数据库连接. mysql_select_db实例 <?php $host="mysql153.secureserver.
-
mysql select缓存机制使用详解
mysql Query Cache 默认为打开.从某种程度可以提高查询的效果,但是未必是最优的解决方案,如果有的大量的修改和查询时,由于修改造成的cache失效,会给服务器造成很大的开销,可以通过query_cache_type[0(OFF)1(ON)2(DEMAND)]来控制缓存的开关. 需要注意的是mysql query cache 是对大小写敏感的,因为Query Cache 在内存中是以 HASH 结构来进行映射,HASH 算法基础就是组成 SQL 语句的字符,所以 任何sql语句的改变
-
MySQL数据库SELECT查询表达式解析
数据的管理在很大一部分是在进行查找工作,而SELECT占据了很大的一部分 SELECT select_expr [,select_expr...] [ FROM table_reference WHERE [where_condition] [GROUP BY {col_name | position} [ASC| DESC],...] [HAVING where_condition] [ORDER BY {col_name | expr |position} [ASC| DESC],...]
-
php操作mysql获取select 结果的几种方法
如果用了 MYSQL_BOTH,将得到一个同时包含关联和数字索引的数组. 用 MYSQL_ASSOC 只得到关联索引(如同mysql_fetch_assoc() 那样), 用 MYSQL_NUM 只得到数字索引(如同 mysql_fetch_row 那样). 1. mysql_fetch_array($rs,MYSQL_ASSOC) [@test01 model]# php test.php Array ( [name] => hellokitty [addr] => i dont kno )
-
MySql数据库中Select用法小结
一.条件筛选 1.数字筛选:sql = "Select * from [sheet1$] Where 销售单价 > 100" 2.字符条件:sql = "Select * from [sheet1$] Where 物品名称 ='挡泥板'" 3.日期条件:sql = "Select * from [sheet1$] Where 物品名称 ='挡泥板'" 4.区间条件:sql = "Select * from [sheet1$] Wh
-
简单了解MySQL SELECT执行顺序
SELECT语句的完整语法为: (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) HAVING <having
-
MySQL 语句执行顺序举例解析
目录 1.SQL数据举例 my_user 表数据 my_order数据 测试数据生成 2.SQL的执行顺序 1.SQL数据举例 举例:有10个用户,输出在订单表中下单数最多的5个人的名字. my_user 表数据 my_order数据 my_order,uid对应my_user表的id: 测试数据生成 写一个存储过程,随机插入10000条数据: CREATE DEFINER=`root`@`localhost` PROCEDURE `test_loop`( ) BEGIN DECLARE i I
-
oracle select执行顺序的详解
SQL Select语句完整的执行顺序:1.from子句组装来自不同数据源的数据:2.where子句基于指定的条件对记录行进行筛选:3.group by子句将数据划分为多个分组:4.使用聚集函数进行计算:5.使用having子句筛选分组:6.计算所有的表达式:7.使用order by对结果集进行排序. oracle 语句提高查询效率的方法 1:.. where column in(select * from ... where ...); 2:... where exists (select '
-
MySQL语句执行顺序和编写顺序实例解析
select语句完整语法: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_
-
sql和MySQL的语句执行顺序分析
今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1)from (2) on (3) join (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum....
-
mysql查询语句join、on、where的执行顺序
目录 一.典型SELECT语句完整的执行顺序 二.from 三.on 四.on 条件与where 条件 1.使用位置 2.使用对象 3.选择与使用 五.join 流程 MySQL 的执行顺序 一.典型SELECT语句完整的执行顺序 1)from子句组装来自不同数据源的数据: 2)使用on进行join连接的数据筛选 3)where子句基于指定的条件对记录行进行筛选: 4)group by子句将数据划分为多个分组: 5)cube, rollup 6)使用聚集函数进行计算: 7)使用having子句筛
-
简单了解mysql语句书写和执行顺序
mysql语句的书写顺序和执行顺序有很大差异. 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join, left join, right join...> join <join表> on <join条件> where <where条件> group by <分组条件> having <分组后的筛选条件> order by <排序条件> limit
-
有关mysql中sql的执行顺序的小问题
今天工作中碰到一个sql问题,关于left join的,后面虽然解决了,但是通过此问题了解了一下sql的执行顺序 场景还原 为避免安全纠纷,把场景模拟. 有一个学生表-S,一个成绩表G CREATE TABLE `test_student` ( `id` bigint(20) NOT NULL COMMENT '学号', `sex` TINYINT DEFAULT '0' COMMENT '性别 0-男 1-女', `name` varchar(255) DEFAULT NULL COMMENT
-
mysql代码执行结构实例分析【顺序、分支、循环结构】
本文实例讲述了mysql代码执行结构.分享给大家供大家参考,具体如下: 本文内容: 什么是代码执行结构 顺序结构 分支结构 循环结构 首发日期:2018-04-18 什么是代码执行结构: 这里所说的代码执行结构就是多条sql语句的执行顺序. 代码执行结构主要用于触发器.存储过程和函数等存储多条sql语句中. 顺序结构: 顺序结构就是从上到下依次执行sql语句 一般默认情况下都是顺序结构 分支结构: 分支结构的执行是依据一定的条件选择执行路径,它会依据我们给定的条件来选择执行那些sql语句 mys
-
Mysql系列SQL查询语句书写顺序及执行顺序详解
目录 1.一个完整SQL查询语句的书写顺序 2.一个完整的SQL语句执行顺序 3.关于select和having执行顺序谁前谁后的说明 1.一个完整SQL查询语句的书写顺序 -- "mysql语句编写顺序" 1 select distinct * 2 from 表(或结果集) 3 where - 4 group by -having- 5 order by - 6 limit start,count -- 注:1.2属于最基本语句,必须含有. -- 注:1.2可以与3.4.5.6中任一
随机推荐
- asp.net实现的计算网页下载速度的代码
- spring如何动态指定具体实现类
- java自定义注解实现前后台参数校验的实例
- ASP.NET 后台登录小技巧介绍
- C#检测两个矩阵是否相等的方法
- Android中让按钮拥有返回键功能的方法及重写返回键功能
- Linux下MySQL安装配置 MySQL配置参数详解
- Python ldap实现登录实例代码
- 轻松掌握JavaScript策略模式
- 微信公众平台开发教程(二) 基本原理及消息接口总结
- 对用户输入的判断的shell实现代码
- VBS教程:运算符-运算符概述
- javascript中checkbox使用方法简单实例演示
- sqlserver下Kill 所有连接到某一数据库的连接
- jquery 选取方法都有哪些
- JavaScript容错例外处理第1/2页
- 在Linux环境配置功能完善的WU-FTP服务器的方法分享
- 个人站长如何年赚百万?
- C语言实现静态顺序表的实例详解
- Android自定义View圆形进度条控件(三)