场景应用:SQL的执行顺序是怎样的?
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了场景应用:SQL的执行顺序是怎样的?相关的知识,希望对你有一定的参考价值。
文章目录
结论
from>join>where>group by>聚合函数>having>select >Distinct >order by>limit
详细执行顺序
1、最先执行 from table;
需要先确定从哪个表中取数据,所以最先执行from table。
2、join连接
用于把来自两个或多个表的行结合起来,简单补充一下连接的类型
- 自然连接(natural join)
- 内连接(inner join):内连接查询能将左表和右表中能关联起来的数据连接后返回,返回的结果就是两个表中所有相匹配的数据。
- 外连接(outer join):外连接分为左外连接(LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行)、右外连接(RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行)、还有一个FULL JOIN(全连接),不过mysql不支持全连接
- 交叉连接(cross join)即笛卡尔连接
3、where语句;
where语句是对条件加以限定
4、分组语句【group by…… having】;
group by是分组语句
having是和group by配合使用的,用来作条件限定
如果中间有聚合函数,那么先执行group by,再执行聚合函数,再执行having
5、聚合函数;
常用的聚合函数有max,min, count,sum,聚合函数的执行在group by之后,having之前
举例:count函数查询分组后,每一组分别有多少条数据
select count(*) from user group by gender
值得注意的是:聚合函数的执行在group by之后,having之前
6、select语句;
对分组聚合完的表挑选出需要查询的数据
7、Distinct
distinct对数据进行去重
如果sql语句存在聚合函数,例如count、max等,会先执行聚合函数再去重
8、order by 排序语句。
order by排序语句
例如下面的升序与降序
select * from user order by id 升序排序
select * from user order by id desc 降序排序
9、limit
limit用于指定返回的数据条数
例如下面两种常见用法:
# 从user表中查询前两条数据
select * from user limit 2
该sql等同于
# 表示从第0条开始取两条数据
select * from user limit 0,2
limit常配合order by使用
# 根据id排序,选出id排序前三的数据
select * from user order by id limit 3
总结
from>join>where>group by>聚合函数>having>select >Distinct >order by>limit
代码案例
sql代码
select
distinct user.name
from user
join vip on user.id=vip.id
where user.id>10
group by user.mobile
having count(*)>2
order by user.id
limit 3;
执行顺序分析
- from user 查询来自user表中的数据
- join vip on user.id=vip.id ,join是表示要关联的表,on是连接的条件
- where user.id>10 查询数据的id大于10
- group by user.mobile 根据user.mobile分组
- 然后先执行count(*)在执行having,查询分组之后数量大于2的分组数据
- select 对分组聚合完的表挑选出需要查询的数据
- distinct 查询出来的数据去重
- order by user.id 对去重后的数据排序
- limit 3 对排序后的数据选出前面3条
以上是关于场景应用:SQL的执行顺序是怎样的?的主要内容,如果未能解决你的问题,请参考以下文章
wpf datagrid表头SortDirection的升序(SortDirection)降序(Ascending)图标怎样放进去的?