sql中经常会被问到的问题

sql的执行顺序

sql的执行顺序和写的顺讯其实是不太一样的。

(8) SELECT (9)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) WITH {CUBE|ROLLUP}
(7) HAVING<having_condtion>
(10) ORDER BY<order_by_list>
(11) LIMIT<limit_number>


在这里插入图片描述
在这里插入图片描述
每一步都会生成一个虚拟表,作为下一个操作的输入
1.第一部,是from,就是我们先要把输入的表进行处理好,毕竟处理不好输入是什么,后面也没啥用,是不是,所以第一步就是from,先对两张表进行笛卡尔乘积,生成表1
2.第二部用On対生成的表进行筛选,对生成的第一个虚拟表,筛选一下,将不符合条件的内容筛选出去。(这只是临时筛选,后面还能恢复),生成表2
3.如果是外连接,会将on筛选方式中,被筛选出去的,那个外连接表中被筛出去的表的哪一个部分补充回来。生成表3
4.使用where再次对表进行筛选,on和where最大的区别就是,on还处在表组成的初期阶段,失败和错误是可以挽回的,但是where表的组成已经完成了,被筛选出去的东西回不来了。

5.groupby进行分组,每个组只返回一个结果。
6.having,对分组后数据再一次进行条件筛选。
7.select,显示我们已经筛选好的数据
8.distinct,删除重复数据,,实际上如果右group by的话,这是一条是没用的哦
9.最后进行排序。

在这里插入图片描述

聚合函数,比如SUM,avg,count本来就是对一组内多条数据使用的聚合函数,聚合函数本阿里就是要在分组后使用,分组之后,我们才能计算组内有多少count,avg,sum,所以聚合函数需要分组,,没有分组就没有聚合函数。
所以where并不能加上聚合函数作为条件,因为where执行在分组前,没有分组没有聚合函数。
聚合函数本来就是为了,分组后,进行数据统计用的。

模糊查询

关键字:
between and
like
in
is not

几个注意的点

1.between… and …
between … and … 最好是左边小于右边,也就是从小到大进行分布排列。

2.in

in(20,35,234,12)表示在这个范围内,只要数字能在这里面就行了。

3.like

使用符号:
%代表,有数不清个字符,%a%代表往左数不清字符,往右也数不清有多少字符。一般用于模糊的知道有那么一个字母,这是很模糊的一个模糊查询。_表示占位置,表示我知道前面有多少个字符,用_来进行站位,一个_表示占有一个位置。

IS NULL 和 IS NOT NULL

SELECT location_id FROM locations WHERE state_province IS NULL

本质来说是一个意思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值