大家在学校里学mysql查询的时候,尤其是遇到比较复杂查询的时候,
不知道有没有经常遇到问题。小编在学习mysql的时候,经常哪个怎么搞,
得出的值也老是不对,今天在这里分享一些原理性的东西,帮助大家理解如何去查询
基础
3、select ...聚合函数 from 表名
1、where ...
2、group by ...
4、having ...
5、order by ...
6、limit ...;
/*
解析:
1. 首先这个按照列来看,分为两列
2. 第二列是mysql的书写顺序
3. 而第一列是它的运行顺序[这个非常重要]
4. 如果没有全用,应该都懂吧,用了的那几个按这个排序
只有知道了它的运行顺序才能解决比较复杂的查询问题
实际上这也能说明 聚合函数和having的使用,大家在学的时候有没有想过
为何where后面为啥不能直接对聚合函数进行筛选,但可以看到where是第一时间
执行的,而聚合函数是第三执行的,所以where不能对聚合函数筛选
*/
- 聚合函数
avg(字段名)
max(字段名)
min(字段名)
sum(字段名)
count(字段名)
》这里大家看英文应该也能知道意思吧,按照前面顺序放即可
- group by
含义:给查询结果分组
- having语句
含义:对聚合函数进行筛选
这些基础语句包括像select语句等等就不详细概述了,直接上手题目吧,以下案例,建议先自己尝试去做
- limit
限制查询结果的行数
实际案例
- 数据准备
CREATE TABLE `sg` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(8) DEFAULT NULL,
`attack` int(11) DEFAULT NULL,
`defense` int(11) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`country` varchar(8) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
INSERT INTO sg VALUES
(1,"诸葛亮",99,90,"男","蜀国"),
(2,"司马懿",98,97,"男","魏国"),
(3,"貂蝉",69,100,"女","东汉"),
(4,"张飞",105,20,"男","蜀国"),
(5,"赵云",130,103,"男","蜀国");
# 我叫它三国表,数据就给大家了,请跟着一起做
- 所有国家的男英雄中 英雄数量最多的前2名的 国家名称及英雄数量
这里建议大家先做一遍,这道题目会的话,至少普通查询知识层面还算扎实
分析:
1. 从哪里入手,就从运行顺序入手,上面那个运行顺序一定是要背的
2.首先第一运行的是where,题目中无疑男英雄就是条件 where gender="男"
3.之后就是分组,读题可以发现它要每个国家的男英雄数量,所以以国家进行分组 group by = "country" as number 这里取个别名
4.然后是查询,查国家和数量 ,数量这个肯定是聚合函数计算 select country,count(id) from sg
5.英雄数量的前两名,这肯定需要排序(从大到小) order by(number)
6.然后就是前两名,limit 2
总结:合起来就是筛选出男英雄后,然后根据国家分组,然后匹配查询表中的国家和数量,然后进行排序,然后取前两名英雄量最多的国家
可以发现,小编无论是分析还是总结写代码,都是按照运行顺序来写的,那个非常重要,当然这里还是需要熟悉语句的定义
select country, count(id) as number
from sg
where gender='男' group by country
order by number DESC
limit 2
- 找出平均攻击力大于105 的国家的前2名,显示国家名称和平均攻击力
小伙伴们尝试一下吧
# 答案放这里了,看起来比较乱,为防止你一眼就
# 记得答案了,尝试一下自己做,经历一次痛苦的思考才能理解它
select country ,avg(attack) from sg group by country having avg(attack)>105 order by avg(attack) DESC limit 2;
补充
having语句通常与group by联合使用
having语句存在弥补了where关键字不能与聚合函数联合使用的不足,where只能操作表中实际存在的字段,
having操作的是聚合函数生成的显示列
本章就到这里,如果能理解上面,并且能做出上面案例,单表的普通查询 恭喜你,成为和我一样有一点小经验的小白了。
标签:聚合,country,查询,单表,Mysql,新手,where,having,group
From: https://blog.csdn.net/weixin_74441029/article/details/139250272