MYSQL学习笔记2021-3-23

本文是关于MySQL的学习笔记,重点介绍了分组函数(count, sum, avg, max, min)及其与group by和having的使用。讲解了分组函数的规则和在where子句中的限制,强调了group by在数据筛选中的作用,同时提到了单行处理函数如ifnull的功能。最后总结了DQL语句中的去重方法distinct。" 108221864,10030910,MYSQL 子查询在WHERE条件的应用详解,"['mysql', '数据库查询', '子查询技术']
摘要由CSDN通过智能技术生成

第二天

演示表格(emp)在这里插入图片描述

分组函数(多行处理函数)

count 计数函数 #count(星号)和count(某个字段)的区别 count(*)代表总记录条数,
count(某一条字段)代表该字段下不为空的条数
sum 求和函数
avg 求平均值
max 求最大值
min 求最小值
分组函数都是对某一组数据进行操作的。//分组函数只有这五个
SQL语句中有一条规则:分组函数不能用在where子句当中。!!
分组函数实在group by函数执行之后执行的,group by 语句是在where之后执行的。!!!
分组函数另一个名字:多行处理函数//输入多行,输出一行。(就比如求和)
(有一个工工资表“emp”
字段是:empno,ename,job,mgr.hirdate,sal(工资),comm,deptno)

找出工资总和:
		select sum(sal)from emp;
找出工资平均值:
		select avg(sal) from emp;
找出工资高于平均工资的员工:
		select ename,sal from emp where sal>(select avg(sal) from emp);#子查询,先求平均值,再求大于它的

分组函数自动忽略空(null)

单行处理函数(每输入一行,就会输出一行)

当运算中出现null时,计算结果就是null!!!

计算每个员工的年薪:
	select ename,(sal+comm)*12 from emp;**#但是**当运算中出现null时,计算结果就是null!!!****
	/*也就是说当sal或者comm中有任意一个出现null时,计算结果就是null(comm:津贴)*/

ifnull:空值处理函数
ifnull(可能为空的字段,怎么处理)

计算每个员工的年薪:(时用ifnull函数处理空值)
	select ename,(sal+ifnull(comm,0))*12 from emp;

group by 和having

**注意:**分组函数一般都会和 group by函数一起使用,所以被称为分组函数
所有分组函数(count ,sum,avg,max,min)都是在 group by(分组字段)函数执行完之后执行的,
当一条sql语句没有 group by 函数时,整个表被看成一组。
当语句中有group by时,前面只能加参与分组的字段和分组函数。如果加了其他的字段·可以查询出来结果,但是结果没有意义。
例如

找出每个岗位薪资最大值:
select ename,max(sal),job #查找名字,最大薪资,岗位(可以查出名字,但是查处的结果没有意义,在mysql里面可以运行,在Orcel中运行时是会报错的)
from emp 
group by job;

group by :按照某个或某些字段进行分组。多个字段进行分组,可以把多个字段看成同一个字段。
having :对分组之后的数据进行再次筛选。

	找出每个工作岗位的最高薪资:
	select job,max(sal)
	from emp 
	group by job;

having和where之间先选where,效率高,先用where过滤,在去分组和排序,实在不能先筛选的就用having。
having函数必须和group by 一起使用!!!

找出每个部门的平均薪资,并且显示大于2000的:#先求平均值,再对结果进行筛选(having)
select deptno,avg(sal) #查找部门编号
from emp #从EMP表中
group by deptno #对部门进行分组
having avg(sal) > 2000; #筛选出大于2000的
找出每个部门的最高薪资,要求显示大于2900的:#先用where筛选出大于2900的。
select deptno,max(sal) #找出部门和最大薪资
from emp 
where sal > 2900 #先筛选出大于2900的
group by deptno;#按照deptno进行分组

总结完整的DQL语句

**
查询结果去重
distinct “字段” #去重复值
distingt只能出现在所有字段的前面,
多个字段表示多个条件联合起来去重。

select
		“字段1,字段2·····”#1
from
		“表名”#2
where
		“字段+条件”#3
group by
		“字段1,字段2···”#4
having
		“字段+条件”#5
order by
		“字段1,字段2···”#6
执行顺序:234516

**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值