表纪录之查(单表查询)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分以上同学的个数试试:

 select count(*) from result where chinese>80;

注意: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,了解了这个顺序,再看看那些报错就清晰很多了,这个还是需要记住的,很重要。

mysql数据库基本操作(五)的更多相关文章

  1. mysql数据库基本操作sql语言

    mysql的启动与关闭 启动 /etc/init.d/mysql start 多实例使用自建脚本启动 2种关闭数据库方法 mysqladmin -uroot -p密码 shutdown #优雅关闭/e ...

  2. day39 mysql数据库基本操作

    什么是数据库 用来存储数据的仓库 数据库可以在硬盘及内存中存储数据 主要学习硬盘中存储数据,因为内存中的数据总有一天会丢失 数据库与文件存储数据区别 (公司的开发是综合内容的) 数据库本质也是通过文件 ...

  3. (三)mysql数据库基本操作

    (1)SQL语句:结构化查询语句 DDL语句 数据定义语言:数据库丶表丶视图丶索引丶存储过程丶函数丶create drop alter DML语句 数据库操作语言:插入数据insert,删除数据del ...

  4. Django/MySql数据库基本操作&ORM操作

    数据库配置: #第一步在settings里面 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbna ...

  5. Mysql数据库基本操作 (一)

    1.使用mysql数据库的必备要素 a. 安装MySQL服务端 b. 安装MySQL客户端 c. [客户端]连接[服务端] d. [客户端]发送命令给[服务端MySQL]服务的接受命令并执行相应操作( ...

  6. mysql数据库基本操作以及获取数据库强大帮助文档

    MySQL数据库强大帮助文档 mysql 中help等价于\h或者? mysql> ? create database;(查看创建数据库的语法) mysql> ? drop databas ...

  7. MySQL数据库 基本操作语句

    操作MySQL数据库 1.创建数据库 create database 数据库名: 2.查看数据库 show databases: 3.选择指定数据库 use 数据库名: 4.删除数据库 drop da ...

  8. MySQL数据库(五)--用户管理、pymysql模块

    一.用户管理(权限管理) 在MySQL中自带的mysql数据库中有4个表用于用户管理的 # 优先级从高到低 user > db > tables_priv > columns_pri ...

  9. MySQL数据库基本操作以及SQL语句

    连接mysql的语法 mysql -u用户名 -p密码 [-h主机名] [-P端口号] 在一个mysql服务器中, 可以有多个mysql数据库(本质是一个文件夹) 在一个mysql数据库中, 可以有多 ...

  10. MySQL数据库(五)—— 用户管理、pymysql模块

    用户权限管理.pymysql模块 一.用户管理(权限管理) 在MySQL中自带的mysql数据库中有4个表用于用户管理的 # 优先级从高到低 user > db > tables_priv ...

随机推荐

  1. 391. Perfect Rectangle

    最后更新 一刷 16-Jan-2017 这个题我甚至不知道该怎么总结. 难就难在从这个题抽象出一种解法,看了别人的答案和思路= =然而没有归类总结到某种类型,这题相当于背了个题... 简单的说,除了最 ...

  2. 单词number 和 numeral 的区别

    原文: http://blog.sina.com.cn/s/blog_72cd06360100vn7t.html be of 的用法,相当于表征特征或属性的形容词. 简单地说,“of + 名词”等于“ ...

  3. sshd登录攻击

    先说简单的防范措施: 1.密码足够复杂 密码的长度大于8位.有数字.大小写字母.特殊字符组合. 2.nmap 扫描 为了避免被扫描到, #看到端口是81 ssh root@192.168.1.63 玩 ...

  4. win10 UWP 申请微软开发人员

    申请微软开发人员能够到https://dev.windows.com/zh-cn/programs/join 假设是学生,先去http://www.dreamspark.com/ 假设是英文,点stu ...

  5. ubuntu如何修改root密码

    安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可 ...

  6. 不是技术牛人,如何拿到国内IT巨头的Offer--转

    http://blog.csdn.net/lsldd/article/details/13506263 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,N ...

  7. vim note (1)

    'vim' go into the vim mode 'i' 'a' 's'    is means insert mode 'v' is means visual mode 'esc' is mea ...

  8. Maple入门使用教程

    http://anony3721.blog.163.com/blog/static/51197420105173915247/ 命令的运行:1.每条命令必须用":"(运行后不显示) ...

  9. 对交换机VLAN及各种端口类型的理解

    每学习一种技术时,我们往往需要去了解why,即这个技术是为解决什么问题而出现的. VLAN全称为Virtual Local Area Network,即虚拟局域网,是逻辑上的一种划分.一般来说,如果交 ...

  10. Struts2的配置文件——web.xml

    任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载. 通常,所有的MVC框架都需要Web应用加载一个核心控制器,对于S ...