4_MySQL_聚合函数和条件查询

Posted Jack·Kwok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4_MySQL_聚合函数和条件查询相关的知识,希望对你有一定的参考价值。

1. 聚合函数

我们在实际开发中,经常需要这样子的需求:给出某个字段中数据的最大值,最小值,平均值,累加值、记录条数等等。如果没有用聚合函数,我们只能通过查询所有数据,然后再通过 Java 代码来做运算,从而得到上面的值。但是这样做本身就是在做冗余操作。那么我们能否在数据库层面就计算出这些值呢?答案是可以的。

我们发现这些值都有一个特征,就是把一个字段的所有数据“浓缩”成一个值,因此伴随着这些值被查询出来的字段也必须是一个值。也就是查询出来后只有一条记录。

查询某个字段有多少记录

select count(字段名或*) from 数据表名;

查询某个字段的最大值

select max(字段名) from 数据表名;

查询某个字段的最小值

select min(age) from 数据表名;

查询某个字段记录的和

select sum(字段名) from 数据表名

查询某个字段的平均值

select avg(字段名) from 数据表名;

注意:聚合函数只有在 select 语句或 having 子句或 order by 子句中使用。而且聚合函数最后的结果都是“输出一行”。

2. 条件查询

前面我们说到“增删改查”是学习数据库语言最重要的,但如果说还要在这里面挑出一个更重要的话,那么我觉得最重要的是“查询”。我们前面学到的只是“查询所有记录” 或者“配合简单的 where 语句查询某一个记录,都属于简单查询的范畴,今天我们来学习”条件查询“。
1、使用关系运算符查询

关系运算符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于

这些语句一般配合 where 子句来实现条件查询,例如:

select 字段1,字段2 from 数据表名 where 字段2 <= 34;

2、使用关键字查询
in 关键字 用于 where 语句中表示找出指定字段在指定值中的记录,例如:以下 SQL 语句会找出字段 2 的值等于值 1 或者值 2 的记录。

select 字段1 from 数据表名 where 字段2 in(1,2);

between and 关键字 用于表示找出指定字段在指定区间值的记录,例如:以下 SQL 语句会找出在字段 2 的值在值 1 和值 2 这个区间的记录。

select 字段1,字段2 from 数据表名 where 字段2 between1 and2;

null 值
null 值一般配合其他(包括上面)的关键字来使用,语法上你可以把它当作一个特殊的值。例:

select 字段1 from 数据表名 where 字段2 is not null;
select 字段1 from 数据表名 where 字段2 is null;

and关键字
连接两个条件,表示都符合的记录。

select 字段1,字段2 from 数据表名 where 字段名1 >  and 字段名2 < 3;

or关键字
连接两个条件,表示只要符合一个即可的记录。

select 字段1,字段2 from 数据表名 where 字段名1 >  or 字段名2 < 3;

like关键字
模糊查询,用于匹配不确定的字符串值。
①匹配普通字符串时(与正常=效果一致,只会匹配一致的字符串)

select 字段1,字段2 from 数据表名 where 字段名1 like 'abc';

②带%的匹配规则(%可以匹配任意长度的字符串,例如:%abc 可以匹配任何以abc结尾的字符串)

select 字段1,字段2 from 数据表名 where 字段名1 like '%abc';

③带_的匹配规则(_可以匹配长度为 1 的字符串,例如:_abc 可以匹配类似aabc或者dabc的字符串)如果要匹配多个字符,就可以用多个_连接,例如d__f

select 字段1,字段2 from 数据表名 where 字段名1 like '_abc';

limit关键字
用户控制显示的记录数。例如:如果一个查询语句本来可以查询出56条记录,但是你用了这个关键字限制其长度为4,那么就只会显示4条记录。(这种方法一般可用于排行版中,比如你的系统只需要显示排行版前十名即可,如果你查出全部然后再筛选的话性能就非常差,因此你可以考虑用这个关键字控制显示的记录数)

select 字段1,字段2 from 数据表名 limit 整数;

group by对查询结果进行分组
①通过分组查询可以按照分组查询的条件将该表分成几个”小表“,一般可以配合聚合函数使用,每个小表对应一个记录,一个记录对应一个聚合函数的结果。例如:

select count(字段1),字段2 from 数据表名 group by 字段2;

②group up 也经常配合聚合函数和 Having 子句一起使用。

select count(字段1),字段2 from 数据表名 group by 字段2 having count(字段1) > 4;

以上 SQL 语句的意思是:先执行 group up,将这张表按照分组条件分成几个小表;再执行聚合函数 count ,计算出每个小表字段1有多少个,最后再执行 having 语句,having 语句的作用和 where 有点类似,即筛选出条件符合的值;最后显示。

关于 having 和 where 子句之间的区别,两者功能相同,都是按条件筛选出合适的数据,但前者是再分组后再对小表进行分别筛选的,而后者则是在分组前进行整体筛选的。
order by对查询结果进行排序
先正常从表中查出数据后,根据指定的排序规则对记录进行排序,asc 或者默认表示顺序排序;desc表示逆序排序。且如果有多个排序,则是先按照前面的先排,前面的相同再按照后面的再排。例如:

SELECT 字段名1,字段名2,FROM 表名 ORDER BY 字段名1 [ASCDESC],字段名2 [ASC | DESC];

以上是关于4_MySQL_聚合函数和条件查询的主要内容,如果未能解决你的问题,请参考以下文章

2018.11.29_MySQL约束_总结

MySQL约束

mysql约束

Django_查询类型_关联查询_聚合查询_分组查询_更新_删除操作

mysql_06_使用聚合函数查询

03_数据库之DML语句