MYSQL普通查询

六眼飞鱼酱① 提交于 2020-03-08 16:39:39

MYSQL普通查询

一、聚合函数(聚合查询)

函数名 功能
avg(字段名) 求指定字段的平均值
max(字段名) 求指定字段的最大值
min(字段名) 求指定字段的最小值
sum(字段名) 求指定字段的记录和
count(字段名) 求指定字段的记录的个数

 

聚合函数使用语法:select 聚合函数1,聚合函数2 from 表名;

注意:select name,max(attack) from sanguo;聚合函数在默认情况下是不能与其他列一起做查询的

表名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)缺点:

  1. 占用物理存储空间
  2. 对表中数据进行更新时,索引也会动态维护,会降低维护速度

(4)索引比对手段

  1. 查询系统时间
  2. 执行查询
  3. 查看系统时间

  在 某列 上创建索引

  1. 查询系统时间
  2. 执行查询
  3. 查看系统时间

(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 表名;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!