表纪录之查(单表查询)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. 数据库系统学习(十)-嵌入式SQL语言之动态SQL

    第十讲 嵌入式SQL语言之动态SQL 静态SQL 区别变量和属性:高级语言向嵌入式SQL传递变量的方法 动态SQL 动态构造SQL语句是应用程序员必须掌握的重要手段 SQL语句的动态构造示例 根据界面 ...

  2. 【基础练习】【线性DP】codevs3027 线段覆盖2题解

    文章被盗还是非常严重,加版权信息 转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看看 这道题目是线性动归 可是思想和背包有些类似 事实上线性动 ...

  3. Elasticsearch 学习笔记 Elasticsearch及Elasticsearch head安装配置

    一.安装与配置 1.到官网下载Elasticsearch,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6. ...

  4. oracle死锁解决经常用法(屡试不爽)

    --1.查询被锁的情况 select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$sessi ...

  5. 初学c的一点体会

    自学C语言的一些体会1 从最初什么都不知道变成知道一点,一转眼就过去了三个多月,最开始只是刚进大学,感觉太闲了不太好就决定学点什么,于是就到图书馆逛了一圈找找看有什么有趣的书可以看看,刚好就在书架上看 ...

  6. 高仿美团iOS版,版本5.7

    高仿美团iOS版,版本:5.7 iOS技术交流群:112365317 github链接:https://github.com/lookingstars/meituan 假设你认为不错.欢迎star 哦 ...

  7. 【网站支付PHP篇】thinkPHP集成汇潮支付(ecpss)

    系列目录 支付宝集成:http://www.cnblogs.com/nerve/p/3437879.html 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家 ...

  8. CentOS笔记-常用网络命令

    1.curl & wget 使用curl或wget命令,不用离开终端就可以下载文件.如你用curl,键入curl -O后面跟一个文件路径.wget则不需要任何选项.下载的文件在当前目录. cu ...

  9. gitlab merge过程

    基本步骤如下: 以我的分支为例 1.创建本地分支,命令 git checkout -b liuping_develop2.创建好分支后提交到远程 ,命令 git push origin liuping ...

  10. tload

    tload命令以图形化的方式输出当前系统的平均负载到指定的终端.假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形. 语法 tload(选项)(参数) 选项 -s:指定闲时的刻度: - ...