MYSQL普通查询
一、聚合函数(聚合查询)
函数名 | 功能 |
avg(字段名) | 求指定字段的平均值 |
max(字段名) | 求指定字段的最大值 |
min(字段名) | 求指定字段的最小值 |
sum(字段名) | 求指定字段的记录和 |
count(字段名) | 求指定字段的记录的个数 |
聚合函数使用语法:select 聚合函数1,聚合函数2 from 表名;
注意:select name,max(attack) from sanguo;聚合函数在默认情况下是不能与其他列一起做查询的
id | name | attack | defense | gender | country |
1 | 诸葛亮 | 102 | 3 | m | 蜀国 |
2 | 司马懿 | 110 | 60 | m | 吴国 |
3 | 貂蝉 | 120 | 33 | w | 蜀国 |
4 | 张飞 | 190 | 90 | m | 魏国 |
5 | 赵云 | 106 | 60 | m | 吴国 |
案例1:找出sanguo表中最大的攻击力值是多少
select max(attack) from sanguo ;
select max(attack) as '最大攻击力' from sanguo ;
案例2:表中共有多少个英雄?
select count(name) as number from sanguo;//如果name是null 查到的数据将不会有null的数据
select count(*) as '英雄个数' from sanguo;//*是这一行 一行都为NULL 才不算 不过不建议用
select count(id) from sanguo; //建议写id
案例3:找出蜀国英雄中攻击力大于200的英雄的数量
select count(attack) from sanguo where attack>200 and country='蜀国';
二、分组查询+聚合查询 -->group by
分组:分组列,值相同的数据会被划分到一组
语法: selsec 分组列,聚合函数(列)
from 表名
where 条件
group by 分组列,...
order by 字段名 (desc)
limit ...;
案例1.求三国表中每个国家的总攻击力是多少
select country,sum(attack) from sanguo group by country;
案例2.计算每个国家的总攻击力,平均攻击力,总防御力和平均防御力
select country,sum(attack) as '总攻击力',avg(attack) as '平均攻击力',sum(defense) as '总防御力',avg(attack) as '平均防御力' from sanguo group by country;
案例3.所有国家的男英雄中,英雄数量最多的前两名国家名称以及英雄的数量
select country,count(id) from sanguo where gender='m' group by country order by count(id) desc limit 2;
select country,count(id) as cnt from sanguo where gender='m' group by country order by cnt desc limit 2;
三、分组筛选 -->having
作用:分组后左组内筛选,配合着 group by 联用
语法: select 分组列,聚合函数(列)
from 表名
where 条件
group by 分组列,...
having 条件
order by 字段名(desc)
limit ...;
案例1:平均攻击力大于105的国家名称是什么
select country,avg(attack) from sanguo group by country having avg(attack)>105;
select country,avg(attack) as av from sanguo group by country having av>105;
四、distinct函数
作用:去重复
语法:select destinct(列) from 表; //列就是字段
案例1:查询sanguo表中共有多少个国家
select distinct(country) from sanguo;
五、查询表记录是做数学运算
运算符:+,-,*,/,%
案例1:查询时显示攻击力翻倍
select attack*2 from sanguo;
案例2:更新蜀国所有的英雄攻击力*2
update sanguo set attack=attack*2 where country='蜀国';
案例3:查询攻击力+100之后大于200的英雄的姓名和国家
select name,country from sanguo where attack +100>200;
六、索引
(1)什么是索引:对数据库表的一列或多列的值进行排序的一种结构
(2)优点:加快数据的检索速度
(3)缺点:
- 占用物理存储空间
- 对表中数据进行更新时,索引也会动态维护,会降低维护速度
(4)索引比对手段
- 查询系统时间
- 执行查询
- 查看系统时间
在 某列 上创建索引
- 查询系统时间
- 执行查询
- 查看系统时间
(5)索引的分类
1.主键索引
1.特点:增加主键之后,主键列自动会被增加索引
2.增加主键[索引]
已有表添加主键
alter table 表名 add primary key(id);
2.唯一索引
1.特点
-
- 可以有多个
- 唯一索引所在的列的值必须唯一
2.实施手段
1.创建表的时候指定唯一性
create table xxx(
id int primary key auto_increment,
phone varchar(20) unique,
)
2.对已有表创建索引
create unique index 索引名 on 表名(字段名);
案例:增加唯一索引
create unique index uq_name on sanguo(name);
insert into sanguo values(null,'赵云',158,65,'m','蜀国');//添加索引就添加不进去了
3.普通索引
1.实施手段
1.创建表同时指定普通索引
create table 表名(
id xxx xxxx,
country varchar(30) ,
index(country),
index(字段名),
)
2.对已有表增加普通索引
create index 索引名 on 表名(字段名);
案例:增加普通索引
create index mul_country on sanguo(country);
(6)取消索引
drop index 索引名称 on 表名;
(7)查询索引
show index from 表名;