mysql数据库基本操作(五)

    xiaoxiao2022-07-02  113

    表纪录之查(单表查询)2

           上一篇讲了4类查询的方式,现在接着上一篇继续看还有哪些方式。

    group by 分组查询

          顾名思义,分组查询要分组,因为mysql5.7之后默认不支持group by语句,需要改配置文件,我没有去改,如果需要用到group by的可以百度一下如何修改配置文件,再练习下面这个例子。

    group by 分组查询:         CREATE TABLE order_menu(              id INT PRIMARY KEY auto_increment,              product_name VARCHAR (20),              price FLOAT(6,2),              born_date DATE,              class VARCHAR (20)                                 );          INSERT INTO order_menu (product_name,price,born_date,class) VALUES ("苹果",20,20170612,"水果"),                                              ("香蕉",80,20170602,"水果"),                                              ("水壶",120,20170612,"电器"),                                              ("被罩",70,20170612,"床上用品"),                                              ("音响",420,20170612,"电器"),                                              ("床单",55,20170612,"床上用品"),                                              ("草莓",34,20170612,"水果");             -- 注意,按分组条件分组后每一组只会显示第一条记录             -- group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。                     -- 按位置字段筛选                        select * from order_menu group by 5;                     -- 练习:对购物表按类名分组后显示每一组商品的价格总和                        select class,SUM(price)from order_menu group by class;                     -- 练习:对购物表按类名分组后显示每一组商品价格总和超过150的商品                        select class,SUM(price)from order_menu group by class                                                         HAVING SUM(price)>150;                    /*                    having 和 where两者都可以对查询结果进行进一步的过滤,差别有:                      <1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;                      <2>使用where语句的地方都可以用having进行替换                      <3>having中可以用聚合函数,where中就不行。                    */             -- GROUP_CONCAT() 函数             SELECT id,GROUP_CONCAT(name),GROUP_CONCAT(JS) from ExamResult GROUP BY 

     

     

     聚合函数

             聚合函数感觉像python的内置函数,先不要管聚合函数要干嘛,先把要求的内容查出来再包上聚合函数即可。(一般和分组查询配合使用),直接开始吧,根据聚合函数功能不同,我们先看 统计表中所有记录的聚合函数:

           1.COUNT(列名):统计行的个数

           我们可以用来统计学生个数吧:

    select count(*) from result;

            统计一下语文成绩80分以上同学的个数试试:

     View Code

           注意:count(*)统计所有行;     count(字段)不统计null值.比如我统计一下语文成绩的个数:

    select count(chinese) from result;

          2.SUM(列名):统计满足条件的行的内容和

           求和函数在各种语言里面用的都还比较多,我们先求一个语文成绩的总分:

    select sum(chinese) as 语文总成绩 from result;

          各科成绩都求个总分吧:

    select sum(chinese) as 语文总成绩, -> sum(english) as 英语总成绩, -> sum(math) as 数学总成绩 from result;

         有了总成绩,是不是可以求所有成绩和平均分啦?

    select sum(chinese)/count(*) from result; #包括Lily的 select sum(chinese)/count(chinese) from result; #不包括Lily的

          3. AVG(列名):

         求平均值,这个可以直接求平均值了,就不用sum那样了,试一下:

    select AVG(chinese) from result;

     

           这个和sum求的不包括Lily的平均一样,说明AVG会自己去除null。

           4.Max、Min

           这个也很好理解了,最大值最小值。先看看英语最高分是多少:

    select MAX(english) from result;

          不多说了,直接找到总分最高和最低的,注意两个最低分的区别。

    select MAX(english+chinese+math) from result; select MIN(english+chinese+math) from result; select MIN(ifnull(english,0)+ifnull(chinese,0)+ifnull(math,0)) from result;

          注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!ifnull(Chinese,0),其他的聚合函数就不做过多介绍了,用法都很简单。

    limit使用

          当数据很多是,我们只想显示部分,就可以用limit来控制,我只显示第一行:

    select * from result limit 1;

          看一下下面一条是什么意思:

    select * from result limit 2,5;

          从结果得到答案,就是跳过前2行,再显示后面5行,用法很简单。

    使用正则表达式查询

          在python中学过正则表达式模块re,在sql中同样存在正则,其实我们上一篇说where的时候,说的就是正则,这里再补充几个例子:

          1.找名字以P开头的信息,这个和p%很像:

    select * from result where name REGEXP '^p';

         2.找名字以y结尾的信息:

    select * from result where name REGEXP 'y$';

        3.找名字以p开头且重复至少1次的所有数据,因为重复两次我们没有这样的数据嘛:

    select * from result where name REGEXP 'p{1}';

            sql 的正则和python的用法其实很像的,掌握一种另一种就很容易明白,这里就不多讲了。还有一点需要注意的是where、order by、group by这些运行的先后顺序,Mysql在执行sql语句时的执行顺序:from先于where先于select先于group by先于having先于order by,了解了这个顺序,再看看那些报错就清晰很多了,这个还是需要记住的,很重要。

    如果你对编程感兴趣或者想往编程方向发展,可以关注微信公众号【筑梦编程】,大家一起交流讨论!小编也会每天定时更新既有趣又有用的编程知识!  

    最新回复(0)