概述一条普通的SQL查询语句它在MySQL数据库中是怎么样被解析和执行的呢?下面一起来了解一下,MySQL是如何解析SQL查询语句的,这对理解MySQL的执行计划也大有益处 。
解析顺序下面是一条普通的SQL查询语句伪代码
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_by_condition >LIMIT < limit_number >
它的解析顺序,实际上是下面这样子的
1 FROM <left_table>2 ON <join_condition>3 <join_type> JOIN <right_table> 第2步和第3步会循环执行4 WHERE <where_condition> 第4步会循环执行,多个条件的执行顺序是从左往右的 。5 GROUP BY <group_by_list>6 HAVING <having_condition>7 SELECT 分组之后才会执行SELECT8 DISTINCT <select_list>9 ORDER BY <order_by_condition>10 LIMIT <limit_number> 前9步都是SQL92标准语法 。limit是MySQL的独有语法 。
【MySQL进阶之语句解析顺序】MySQL是关系型数据库,基于行和列的结构 。SQL语句查询,目的就是检索数据库中符合条件的数据行和列,反过来说就是把结果集中不符合条件的数据行和列过滤掉,然后返回符合条件的数据行和列 。从整个角度出发,可以把一条SQL语句及其解析顺序的构成归纳以下4个部分
- 行过滤
- 列过滤
- 排序
- 分页
解析细节分析
- FROM
- ON过滤
- OUTER JOIN添加外部列
- WHERE
- GROUP BY
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- LIMIT
总结
- 鱼骨图
文章插图
SQL语句解析顺序
- 流程分析
1. FROM(将最近的两张表,进行笛卡尔积)---VT1
2. ON(将VT1按照它的条件进行过滤)---VT2
3. LEFT|RIGHT JOIN(保留主表的记录)---VT3
4. WHERE(过滤VT3中的记录)--VT4…VTn
5. GROUP BY(对VT4的记录进行分组)---VT5
6. HAVING(对VT5中的记录进行过滤)---VT6
7. SELECT(对VT6中的记录,选取指定的列)--VT7
8. DISTINCT (寻找VT7中的重复列,并删掉)--VT8
9. ORDER BY(对VT8的记录进行排序)--VT9
10. LIMIT(对排序之后的值进行分页)--MySQL特有的语法
- WHERE条件解析顺序
Oracle :从右往左去执行WHERE条件的 。
推荐阅读
- 茶叶肉桂的功效与作用,健康之宝肉桂茶的品质与功效
- 茶七酒八感悟之分寸,东溪试茶录讲述总叙焙名
- 茶百科之北港毛尖,北港毛尖简介
- 传佤王之血统,新品拉佤布傣四大名普之布朗春毫震撼上市
- 茶叶烘焙之学理,茶怎么炭焙
- 茶百科之腾冲磨锅茶,云南腾冲开摘新茶
- 大滇说茶系列介绍,2015年大滇号春茶之801批四星景迈生态
- Mysql6.5二进制安装
- 茶山揭秘系列之大安,古六大茶山古六大茶山系列之莽枝古树茶
- Python全栈之Flask 简介