Mysql—select语句执行过程

select执行过程

(8)select (9) distinct <select list>
(1)from  <left table>
(3)        <join type> join <right table
(2)   on<join condiction>
(4)where<>
(5)group by <>
(6)with {CUBE|ROLLUP}
(7)having <having list>
(10)order by<order by list>
(11)limit<limit list>

  1. FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1
  2. ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
  3. JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。
  4. WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
  5. GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
  6. with CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.
  7. HAVING: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。
  8. SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。
  9. DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.
  10. ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
  11. LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

insert执行过程

时间: 2024-08-01 22:51:52

Mysql—select语句执行过程的相关文章

mysql select语句执行顺序

    SELECT语句定义       一个完成的SELECT语句包含可选的几个子句. SELECT语句的定义如下: <SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>] SELECT子句是必选的,其它子句如WHERE子句.GRO

(转载)MySQL select 语句执行顺序

Mysql-----from子句-> join子句-> on子句-> where子句 -> group子句-> having子句-> select子句 ->order by子句 -> limit子句 (7)  SELECT (8)  DISTINCT <select_list>(1)  FROM <left_table>(3)  <join_type> JOIN <right_table>(2)  ON <

mysql之sql语句执行过程

1.SQL语句执行过程  1.客户端发送一条sql查询语句给服务器;     2.服务器通过权限检查之后,首先会检查查询缓存,如果命中了缓存,则立即返回 存储在缓存中的结果,否则进入下一步;     3.服务器端进行sql解析,预处理,再由查询优化器根据该sql所涉及的数据表的统计信息进行计算,生成对应的执行计划;     4.mySQL根据查询优化器生成的执行计划,调用存储引擎的API来执行查询;      5.将查询结果返回给客户端;    2.SQL语句执行过程的注意事项 1.在执行查询时

oracle学习笔记 SQL语句执行过程剖析讲课

oracle学习笔记 SQL语句执行过程剖析讲课 这节课通过讲述一条SQL语句进入数据库 和其在数据库中的整个的执行过程 把数据库里面的体系结构串一下. 让大家再进一步了解oracle数据库里面的各个进程.存储结构以及内存结构的关联关系. 首先来讲整个体系中有客户端.实例和数据库 数据库里有三类文件 控制文件ctl.数据文件dbf.日志文件log 实例中SGA有六大池子 第一大内存区shared pool即共享池 第二大内存区buffer cache 第三块是redo log 我们主要讲上面的三

Mysql select语句设置默认值

1.在没有设置默认值的情况下: SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_time FROM userinfo LEFT JOIN region ON userinfo.adm_regionid = region.id 结果: 设置显示默认值: SELECT userinfo.id, user_name, role, adm_regionid, IFNULL(region_name,0) as

mysql.select语句里怎样批量的在一个字段前面加指定字符

mysql.select语句里怎样批量的在一个字段前面加指定字符?也就是update语句怎样写才能实现? 假设现在需要更新的字段是name,对应的值是value,现在要将字符"B"批量的加到原来值之前,变成Bvalue,请问update语句怎么写? update tablename set name=concat("B",name); mysql.select语句里怎样批量的在一个字段前面加指定字符

MySQL(五)SELECT语句执行顺序

上一篇讲述了Oracle的SELECT语法的执行顺序,这篇讲述MySQL的SELECT语法的执行顺序.MySQL的SELECT语法的执行顺序和Oracle的基本相同,只是增加了MySQL独有的LIMIT语法. 目录 一.SELECT语句的处理过程 1. FROM阶段 2. WHERE阶段 3. GROUP BY阶段 4. HAVING阶段 5. SELECT阶段 6. ORDER BY阶段 7. LIMIT阶段 一.SELECT语句的处理过程 查询操作是关系数据库中使用最为频繁的操作,也是构成其

MySQL sql语句执行顺序

sql语句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_

select语句执行的顺序,子查询和联合查询【这三点都是重点】

select (字段或表达式) (from 资源) where 1(用来先处理筛选后加条件) (AND条件附加)(group by)(order by)(limit); 1.group by分组[分组的作用在于分组统计上使用分组,每组正常只显示一条信息][基本都是用在分组统计方面,配合聚合函数进行处理] [这个重点] group_concat(函数):会将组内的元素进行拼接显示[这个能够显示分组后的组内的显示效果] 多字段分组[group by+多个字段并列即可] [分组字段的使用主要还是在统计