SQL数据库 select查询语句拓展

接上篇:https://blog.csdn.net/Oil_Curry/article/details/102555456

排序
ORDER BY col_name ASC|DESC。asc升序,desc降序,默认是升序。select * table_name order by sal desc; --排序中null最大
where deptno=20 order by sal; --先where再order by。
对于某个字段有重复的值可以指定其他排序字段。 order by col1 asc,col2 desc;

分组函数(聚合函数、单行函数) 5个
特点:会自动忽略值为null的记录
只会得到一个结果
select AVG(sal) from emp; --平均
select SUM(sal) from emp; --求和
MAX() 求最大值;MIN() 求最小值。
COUNT() 求记录的条数

分组语句 GROUP BY col_name
对col字段进行分组,字段相同的记录分为一组,可以用分组函数对分组的进行统计。
特点:如果在sql语句使用了group by在select显示,只能显示分组的字段以及经过分组函数处理的字段。
select deptno from emp group by deptno; --按部门分组
select deptno,count(1) from emp group by deptno; --统计每个部门的人数
select deptno,job,avg(sal) from emp group by deptno,job; --组合字段分组,只有两个字段的值相等时才视为一个小组
where job!=‘clerk’ group by deptno; --按deptno分组但去掉clerk岗位的员工

过滤分组记录 HAVING 只能用在group by语句后面
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000; --平均工资大于2000的部门
除去null,where deptno is not null group by deptno ;group by deptno havin gdeptno is not null
经where条件过滤,null部门舍弃,剩下的分组统计;没有过滤,全表数据分组,分组统计,过滤分组记录
如果能在where中过滤就在where中过滤。
select deptno,count(1) FROM emp WHERE deptno is not null GROUP BY deptno HAVING count(1)>1 ORDER BY count(1) desc;
select语句-> from语句-> where语句-> group by语句-> having语句-> order by语句 顺序不能颠倒
解析顺序:from where group having select order

from 原始数据的来源
from a,b,c,d 来自多张表,解析顺序是从右往左,从后往前。
数据量小的表放在后面效率更高
where 过滤原始数据的条件 从右往左,从下往上
过滤数据量比较大的条件放在后面
group by 对匹配带出来的原始数据进行分组 比较消耗性能
一般来说,都会用聚合函数进行处理。
having

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值