关闭

史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」

标签: 数据库MySQL分组统计查询条件
1995人阅读 评论(0) 收藏 举报
分类:

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

数据的高级操作

查询数据(中)

where子句

where字句:用来判断数据和筛选数据,返回的结果为0或者1,其中0代表false1代表truewhere是唯一一个直接从磁盘获取数据的时候就开始判断的条件,从磁盘中读取一条数据,就开始进行where判断,如果判断的结果为真,则保持,反之,不保存。

判断条件

  • 比较运算符:><>=<=<>=likebetween andinnot in
  • 逻辑运算符:&&||、和!.

执行如下 SQL 语句,进行测试:

-- 查询表 student 中 id 为 2、3、5 的记录
select * from student where id = 2 || id = 3 || id = 5;
select * from student where id in (2,3,5); 

1

-- 查询表 student 中 id 在 2 和 5 之间的记录
select * from student where id between 2 and 5;

2

如上图所示,咱们会发现:在使用between and的时候,其选择的区间为闭区间,即包含端点值。此外,and前面的数值必须大于等于and后面的数值,否则会出现空判断,例如:

3

group by子句

group by子句:根据表中的某个字段进行分组,即将含有相同字段值的记录放在一组,不同的放在不同组

  • 基本语法group by + 字段名;

执行如下 SQL 语句,进行测试:

-- 将表 student 中的数据按字段 sex 进行分组
select * from student group by sex;

4

观察上图,咱们会发现:表student在分组过后,数据“丢失”啦!实际上并非如此,产生这样现象原因为:group by分组的目的是为了(按分组字段)统计数据,并不是为了单纯的进行分组而分组。为了方便统计数据,SQL 提供了一系列的统计函数,例如:

  • cout():统计分组后,每组的总记录数;
  • max():统计每组中的最大值;
  • min():统计每组中的最小值;
  • avg():统计每组中的平均值;
  • sum():统计每组中的数据总和。

执行如下 SQL 语句,进行测试:

-- 将表 student 中的数据按字段 sex 进行分组,并进行统计
select sex,count(*),max(age),min(age),avg(age),sum(age) from student group by sex;

5

其中,count()函数里面可以使用两种参数,分别为:*表示统计组内全部记录的数量;字段名表示统计对应字段的非null(如果某条记录中该字段的值为null,则不统计)记录的总数。此外,使用group by进行分组之后,展示的记录会根据分组的字段值进行排序,默认为升序。当然,也可以人为的设置升序和降序。

  • 基本语法group by + 字段名 + [asc/desc];

执行如下 SQL 语句,进行测试:

-- 将表 student 中的数据按字段 sex 进行分组,并排序
select sex,count(*) from student group by sex;
select sex,count(*) from student group by sex asc;
select sex,count(*) from student group by sex desc;

6

通过观察上面数个分组示例,细心的同学会发现:咱们在之前的示例中,都是用单字段进行分组。实际上,咱们也可以使用多字段分组,即:先根据一个字段进行分组,然后对分组后的结果再次按照其他字段(前提是分组后的结果中包含此字段)进行分组

执行如下 SQL 语句,进行测试:

-- 将表 student 中的数据先按字段 grade 进行分组,再按字段 sex 进行分组
select *,count(*) from student group by grade,sex;

7

在这里,函数group_concat(字段名)可以对分组的结果中的某个字段值进行字符串连接,即保留该组某个字段的所有值。例如:

-- 将表 student 中的数据按字段 sex进行分组,并保留字段 name 的值
select sex,age,count(*),group_concat(name) from student group by sex;

8

此外,简单介绍回溯统计的概念:利用with rollup关键字(书写在 SQL 语句末尾),可以在每次分组过后,根据当前分组的字段进行统计,并向上一级分组进行汇报。例如:

-- 将表 student 中的数据按字段 sex进行分组,并进行回溯统计
select sex,count(*) from student group by sex with rollup;

9

观察上图,咱们会发现:在进行回溯统计的时候,会将分组字段置空


温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

5
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」

数据的高级操作查询数据(上) 基本语法: select + 字段列表/* + from + 表名 + [where 条件]; 完整语法: select + [select 选项] + 字段列表/* ...
  • qq_35246620
  • qq_35246620
  • 2017-06-25 19:09
  • 2205

史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」

数据的高级操作 查询数据(中) where子句 where字句:用来判断数据和筛选数据,返回的结果为0或者1,其中0代表false,1代表true,where是唯一一个直接从磁盘获取...
  • Nathan_f
  • Nathan_f
  • 2017-08-06 15:21
  • 125

史上最简单的 MySQL 教程(二十五)「数据的高级操作 之 查询(下)」

数据的高级操作查询数据(下)having 子句;order by 子句;limit 子句。
  • qq_35246620
  • qq_35246620
  • 2017-07-11 08:27
  • 1735

史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」

数据的高级操作 查询数据(上) 基本语法: select + 字段列表/* + from + 表名 + [where 条件];完整语法: select + [select 选项] + 字段...
  • Nathan_f
  • Nathan_f
  • 2017-08-06 15:20
  • 90

史上最简单的 Spring MVC 教程(一)

1 简介Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块,...
  • qq_35246620
  • qq_35246620
  • 2017-01-24 22:34
  • 9484

MySQL高级查询——连接查询实例详解

前言 我们使用SQL查询不能只使用很简单、最基础的SELECT语句查询。如果想从多个表查询比较复杂的信息,就会使用高级查询实现。常见的高级查询包括多表连接查询、内连接查询、外连接查询与组合查询等,今天...
  • zhangliangzi
  • zhangliangzi
  • 2016-05-13 17:08
  • 18182

史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」

数据的高级操作蠕虫复制蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。根据已有表创建新表,即复制表结构,其基本语法为: create table + 表名 +...
  • qq_35246620
  • qq_35246620
  • 2017-06-03 21:14
  • 2379

史上最简单的 MySQL 教程(二十)「数据的高级操作 之 主键冲突」

数据的高级操作 数据的操作,无外乎增删改查。 新增数据的基本语法为: insert into + 表名 + [(字段列表)] + values (值列表); 在数据插入的时候,...
  • Nathan_f
  • Nathan_f
  • 2017-08-06 15:18
  • 96

史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」

数据的高级操作 蠕虫复制 蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。 根据已有表创建新表,即复制表结构,其基本语法为: crea...
  • Nathan_f
  • Nathan_f
  • 2017-08-06 15:19
  • 78

史上最简单的 MySQL 教程(二十二)「数据的高级操作 之 更新 & 删除」

数据的高级操作更新数据 基本语法: update + 表名 + set + 字段 = 值 + [where 条件]; 高级语法: update + 表名 + set + 字段 = 值 + [where...
  • qq_35246620
  • qq_35246620
  • 2017-06-25 18:34
  • 1729
    个人资料
    • 访问:824505次
    • 积分:11943
    • 等级:
    • 排名:第1457名
    • 原创:258篇
    • 转载:85篇
    • 译文:11篇
    • 评论:898条
    博主的 GitHub 账号
    GitHub : Charies Gavin

        鉴于 CSDN 糟糕的用户体验,博主会将一些优质的文章迁移到 Charies Gavin's Blog  欢迎大家在 GitHub 上 Follow 博主,以及 Fork、Star、Watch 博主的项目。


      青春不老 奋斗不止


      好学若饥虚心若愚
    博客专栏