mysql查询语句逻辑查询步骤
2017-02-21 23:03
766 查看
MYSQL逻辑查询步骤
查询操作是关系数据库中使用最为频繁的操作,也是构成其他MySQL语(如DELETE、UPDATE)的基础。查询处理的顺序如下:
(7) SELECT (8) DISTINCT
(1) FROM
(3) JOIN
(2) ON
(4) WHERE
(5) GROUP BY
(6) HAVING
(9) ORDER BY
(10) LIMIT
1)FROM:对FROM子句中的左表和右表执行笛卡儿积(Cartesian
product),产生虚拟表VT1。
2)ON:对虚拟表VT1应用ON
4000
筛选,只有那些符合的行才**入虚拟表VT2中。
3)JOIN:如果指定了OUTER
JOIN(如LEFT OUTERJOIN、RIGHT
OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。如果FROM子句包含两个以上表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1)~步骤3),直到处理完所有的表为止。
4)WHERE:对虚拟表VT3应用WHERE过滤条件,只有符合的记录才**入虚拟表VT4中。此时数据还没有分组,所以不能在where中出现对统计的过滤
5)GROUP BY:根据GROUP
BY子句中的列,对VT4中的记录进行分组操作,产生VT5。在GROUP
BY阶段,数据库认为两个NULL值是相等的,因此会将NULL值分到同一个分组中。
6)CUBE|ROLLUP:对表VT5进行CUBE或ROLLUP操作,产生表VT6。
7)HAVING:对虚拟表VT6应用HAVING过滤器,只有符合的记录才**入虚拟表VT7中。count(expr) 会返回expr不为NULL的行数,count(1)、count(*)会返回包括NULL值在内的所有数量
8)SELECT:第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中。
9)DISTINCT:去除重复数据,产生虚拟表VT9。
10)ORDER BY:将虚拟表VT9中的记录按照进行排序操作,产生虚拟表VT10。如果不指定排序,数据并非总是按照主键顺序进行排序的。NULL被视为最小值
11)LIMIT:取出指定行的记录,产生虚拟表VT11,并返回给查询用户。LIMIT
n, m的效率是十分低的,一般可以通过在where条件中指定范围来优化 where
id> ? limit 10
查询操作是关系数据库中使用最为频繁的操作,也是构成其他MySQL语(如DELETE、UPDATE)的基础。查询处理的顺序如下:
(7) SELECT (8) DISTINCT
(1) FROM
(3) JOIN
(2) ON
(4) WHERE
(5) GROUP BY
(6) HAVING
(9) ORDER BY
(10) LIMIT
1)FROM:对FROM子句中的左表和右表执行笛卡儿积(Cartesian
product),产生虚拟表VT1。
2)ON:对虚拟表VT1应用ON
4000
筛选,只有那些符合的行才**入虚拟表VT2中。
3)JOIN:如果指定了OUTER
JOIN(如LEFT OUTERJOIN、RIGHT
OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。如果FROM子句包含两个以上表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1)~步骤3),直到处理完所有的表为止。
4)WHERE:对虚拟表VT3应用WHERE过滤条件,只有符合的记录才**入虚拟表VT4中。此时数据还没有分组,所以不能在where中出现对统计的过滤
5)GROUP BY:根据GROUP
BY子句中的列,对VT4中的记录进行分组操作,产生VT5。在GROUP
BY阶段,数据库认为两个NULL值是相等的,因此会将NULL值分到同一个分组中。
6)CUBE|ROLLUP:对表VT5进行CUBE或ROLLUP操作,产生表VT6。
7)HAVING:对虚拟表VT6应用HAVING过滤器,只有符合的记录才**入虚拟表VT7中。count(expr) 会返回expr不为NULL的行数,count(1)、count(*)会返回包括NULL值在内的所有数量
8)SELECT:第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中。
9)DISTINCT:去除重复数据,产生虚拟表VT9。
10)ORDER BY:将虚拟表VT9中的记录按照进行排序操作,产生虚拟表VT10。如果不指定排序,数据并非总是按照主键顺序进行排序的。NULL被视为最小值
11)LIMIT:取出指定行的记录,产生虚拟表VT11,并返回给查询用户。LIMIT
n, m的效率是十分低的,一般可以通过在where条件中指定范围来优化 where
id> ? limit 10
相关文章推荐
- MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(二)
- 连接数据库的步骤SQL Server 与mysql 以及一些数据库查询语句
- MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)
- MySQL技术编程内幕——逻辑查询处理的步骤序号
- 转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序
- mysql 查询语句分析explain
- MSSQL逻辑查询的步骤 摘自:Microsoft SQL Server 2005技术内幕:T-SQL查询
- 从一个MysqL的例子来学习查询语句
- 子查询语句 null值逻辑研究
- J2EE入门视频教程第五讲——MySQL中的数据类型及命令行基本查询语句
- 如何设计高效合理的MySQL查询语句
- T-SQL查询语句的执行步骤
- mysql的经典查询语句
- mysql的经典查询语句
- SQL Server 2008的逻辑查询处理步骤
- mysql limit查询语句优化原则
- 设计高效合理的MySQL查询语句讲解
- mysql随机查询语句
- MySQL中动态生成多条件查询语句
- 找出Mysql查询速度慢的SQL语句