史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」
来源:互联网 发布:java上传文件的原理 编辑:程序博客网 时间:2024/05/01 17:25
数据的高级操作
查询数据(中)
where
子句
where
字句:用来判断数据和筛选数据,返回的结果为0
或者1
,其中0
代表false
,1
代表true
,where
是唯一一个直接从磁盘获取数据的时候就开始判断的条件,从磁盘中读取一条数据,就开始进行where
判断,如果判断的结果为真,则保持,反之,不保存。
判断条件:
- 比较运算符:
>
、<
、>=
、<=
、<>
、=
、like
、between and
、in
和not in
; - 逻辑运算符:
&&
、||
、和!
.
执行如下 SQL 语句,进行测试:
- 1
- 2
- 3
- 1
- 2
- 3
- 1
- 2
- 1
- 2
如上图所示,咱们会发现:在使用between and
的时候,其选择的区间为闭区间,即包含端点值。此外,and
前面的数值必须大于等于and
后面的数值,否则会出现空判断,例如:
group by
子句
group by
子句:根据表中的某个字段进行分组,即将含有相同字段值的记录放在一组,不同的放在不同组。
- 基本语法:
group by + 字段名;
执行如下 SQL 语句,进行测试:
- 1
- 2
- 1
- 2
观察上图,咱们会发现:表student
在分组过后,数据“丢失”啦!实际上并非如此,产生这样现象原因为:group by
分组的目的是为了(按分组字段)统计数据,并不是为了单纯的进行分组而分组。为了方便统计数据,SQL 提供了一系列的统计函数,例如:
cout()
:统计分组后,每组的总记录数;max()
:统计每组中的最大值;min()
:统计每组中的最小值;avg()
:统计每组中的平均值;sum()
:统计每组中的数据总和。
执行如下 SQL 语句,进行测试:
- 1
- 2
- 1
- 2
其中,count()
函数里面可以使用两种参数,分别为:*
表示统计组内全部记录的数量;字段名
表示统计对应字段的非null
(如果某条记录中该字段的值为null
,则不统计)记录的总数。此外,使用group by
进行分组之后,展示的记录会根据分组的字段值进行排序,默认为升序。当然,也可以人为的设置升序和降序。
- 基本语法:
group by + 字段名 + [asc/desc];
执行如下 SQL 语句,进行测试:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
通过观察上面数个分组示例,细心的同学会发现:咱们在之前的示例中,都是用单字段进行分组。实际上,咱们也可以使用多字段分组,即:先根据一个字段进行分组,然后对分组后的结果再次按照其他字段(前提是分组后的结果中包含此字段)进行分组。
执行如下 SQL 语句,进行测试:
- 1
- 2
- 1
- 2
在这里,函数group_concat(字段名)
可以对分组的结果中的某个字段值进行字符串连接,即保留该组某个字段的所有值。例如:
- 1
- 2
- 1
- 2
此外,简单介绍回溯统计的概念:利用with rollup
关键字(书写在 SQL 语句末尾),可以在每次分组过后,根据当前分组的字段进行统计,并向上一级分组进行汇报。例如:
- 1
- 2
- 1
- 2
观察上图,咱们会发现:在进行回溯统计的时候,会将分组字段置空。
温馨提示:符号[]
括起来的内容,表示可选项;符号+
,则表示连接的意思。
- 史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」
- 史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」
- 史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」
- 史上最简单的 MySQL 教程(二十五)「数据的高级操作 之 查询(下)」
- 史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」
- 史上最简单的 MySQL 教程(二十)「数据的高级操作 之 主键冲突」
- 史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」
- 史上最简单的 MySQL 教程(二十二)「数据的高级操作 之 更新 & 删除」
- 史上最简单的 MySQL 教程(二十)「数据的高级操作 之 主键冲突」
- 史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」
- 史上最简单的 MySQL 教程(二十二)「数据的高级操作 之 更新 & 删除」
- 史上最简单的 MySQL 教程(六)「SQL 基本操作 之 数据操作」
- 史上最简单的 MySQL 教程(十四)「列属性 之 主键」
- 史上最简单的 MySQL 教程(二十六)「连接查询(上)」
- 史上最简单的 MySQL 教程(二十七)「连接查询(下)」
- 史上最简单的 MySQL 教程(二十六)「连接查询(上)」
- 史上最简单的 MySQL 教程(二十七)「连接查询(下)」
- 史上最简单的 MySQL 教程(四)「SQL 基本操作 之 库操作」
- python 控制adb
- (hdu6033)Add More Zero(数学,取对数)
- C++中extern函数介绍
- poj1328 Radar Installation
- apt-get install 时lock问题
- 史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」
- 干货:Dao单元测试项目实战
- 学习之道的总结
- 【Python】Numpy中的tile方法介绍
- 使用python经常出现NameError: name 'xxx' is not defined
- 常见数学符号
- 多线程之概念字典
- win10, ubuntu 双系统详细安装教程
- 【面试题】Hadoop相关