笔试被问烂了:SQL的执行顺序

先给结论

from>join>where>group by>聚合函数>having>select>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配合使用的,用来作条件限定

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用于指定返回的数据条数

select * from user limit 2
从user表中查询前两条数据
该sql等同于
select * from user limit 0,2
表示从第0条开始取两条数据

limit常配合order by使用

select * from user order by id limit 3
根据id排序,选出id排序前三的数据

总结

from>join>where>group by>聚合函数>having>select>order by>limit

例子

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;

执行顺序

  1. from user
  2. join vip on user.id=vip.id ,join是表示要关联的表,on是连接的条件
  3. where user.id>10
  4. group by user.mobile 根据user.mobile分组
  5. 然后先执行count(*)在执行having,查询分组之后数量大于2的分组数据
  6. select 对分组聚合完的表挑选出需要查询的数据
  7. distinct查询出来的数据去重
  8. order by user.id 对去重后的数据排序
  9. limit 3对排序后的数据选出前面3条
#秋招##后端##数据库##sql##笔试#
全部评论
sql执行就是: 先有表(from、on、join),才能过滤(where),再才能分组(group、having),再才能选择去重(select distinct),再才能排序(order by),最后才能分页(limit)
117 回复 分享
发布于 2022-09-06 09:31 陕西
我出息了!最近在看sql必知必会,居然能看懂你在说什么了
9 回复 分享
发布于 2022-09-05 15:47 北京
阿巴阿巴
1 回复 分享
发布于 2022-09-11 10:36 上海
点赞 回复 分享
发布于 2022-09-05 18:41 上海
厉害,top1了
点赞 回复 分享
发布于 2022-09-05 17:48 广东
我前段时间才看到的,在复习一下,4.7万了
3 回复 分享
发布于 2022-09-06 00:11 湖北
tql
2 回复 分享
发布于 2022-09-05 18:05 广东
rk1
2 回复 分享
发布于 2022-09-05 17:59 湖南
阿巴阿巴
1 回复 分享
发布于 2022-09-11 10:36 上海
有用!
1 回复 分享
发布于 2022-09-06 00:19 广东
这是哪个公司呀
1 回复 分享
发布于 2022-09-05 16:57 上海
可以到我主页看看我公司,今年互联网情况不好的我觉得是个好的选择
点赞 回复 分享
发布于 2022-09-15 14:32 北京
不错,不错
点赞 回复 分享
发布于 2022-09-07 11:03 湖北
m
点赞 回复 分享
发布于 2022-09-06 17:41 陕西
点赞 回复 分享
发布于 2022-09-06 15:22 广东
666
点赞 回复 分享
发布于 2022-09-06 12:28 四川
66
点赞 回复 分享
发布于 2022-09-06 12:26 四川
超哥 TQL 
点赞 回复 分享
发布于 2022-09-06 11:06 广东
tql!
点赞 回复 分享
发布于 2022-09-05 22:24 广东
点赞 回复 分享
发布于 2022-09-05 21:46 广东

相关推荐

04-12 21:52
南开大学 Java
鼠鼠有点摆,去年边学着没敢投简历,没实习。从1月到现在总共面了五次,四次字节的日常(HR打电话约面试才敢去的),然后一次腾讯的暑期,都是一面挂,其他则是没给面。暑期的岗,4.2才开始海投,前面想着等字节第四次一面后再投,结果挂,而且感觉投晚了。字节投了11个,9个简历挂,剩下2个没动静。阿里全都简历挂,剩下的在"投递简历"。腾讯给了一次面。然后其他大中厂、手机厂什么的都是做完测评or笔试就没下文,打开几个看也是终止流程,感觉剩下的也应该是简历挂了。感觉是简历的原因?项目部分,几次面试,感觉面试官主要就拷问过秒杀这一个点。自己说的时候会尝试把sse那条说成亮点,但除了腾讯面试官问过一下这整个点在业务方面对用户有什么用之类的问题外,其他最多只是问一下sse八股...感觉也许不是很让面试官感兴趣。这个短链接也是无人问津,就被问过一回雪花算法的设计。也许我该拿点评改改,然后再在网上找一个什么项目,凑两个,而不是用自己现在这两个项目?或者是点评改改放前面,然后原本第一个项目,把秒杀抽掉,剩下的想办法从网上火的RAG项目里移植点亮点,或者直接就用网上的RAG项目?感觉我主要还是偏向后端开发,但是感觉如果除开点评,再拿一个项目,想不到有什么自己能掌控且跟点评不重的。然后鼠鼠之前主要的问题是担心面试让打开项目演示,然后就一直花时间在用AI整第一个项目,第二个项目都没时间整,第四次面试之前还因为太害怕被认为不熟悉项目,跟AI一起把简历的说辞做了大幅度弱化,然后暑期都是拿弱化后的简历投的,感觉是不是看上去太没有吸引力就直接给简历挂了。(图1是弱化后的,图2是弱化前的,但之前3月初投了几家好像也是简历挂。)而且因为3月花了很多时间整在跟AI整代码,导致八股和算法都没怎么看,算法之前有跟灵神题单刷一些,还算入门,但是八股只看了一些基本的,可能面试的时候只答得上来60-70%,而且表述有些混乱,都是想到哪说到哪;前面几回面试基本上都有大板块的基础八股没答出来,比如RedisZ Set数据结构,MQ延时消息、可靠性保证,JVM内存分配的过程、GC roots,JUC锁,设计模式。现在有点不知道该怎么办。求大佬们给点简历修改建议或者面试准备建议,不胜感激!
何时能不做牛马:简历每个点之间的间距可以缩一下。几乎没遇到过要演示项目的情况,即使万一遇上了你也可以说部署在其他电脑上本地没代码。nku不应该简历挂吧?抓紧背背八股练练表达,不要放弃,五六月份找到也不晚(不然还得提前入职
应届生简历当中,HR最关...
点赞 评论 收藏
分享
牛客93169152...:可以发邮件,我停了三天没收到链接,发邮件问了一下,十分钟后就有了
点赞 评论 收藏
分享
评论
206
1342
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务