• MYSQL普通查询


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

  • 相关阅读:
    非阻塞式NIO 小案例(模拟聊天室)
    网络通信小案例,服务端接收成功要给客户端一个反馈(阻塞式)
    阻塞式网络通信小案例:
    NIO的非阻塞式网络通信
    字符编码
    使用分散(Scatter)与聚集(Gather)来实现文件的复制
    使用通道之间的数据传输(效果,也是实现文件的复制)
    创建直接缓存区完成文件的复制
    C++预处理详解
    C++的学习资源
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11154916.html
Copyright © 2020-2023  润新知