MySQL第六章


MySQL条件查询

我们知道从 MySQL 表中使用 SELECT 语句来查询数据,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

SELECT 字段名 FROM 表名 WHERE 条件;
1647167339514

还有个运算符表:

运算符表**

关系运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
逻辑运算符 功能
AND 或 && 并且(多个条件同时成立)
OR 或 || 或者(多个条件任意成立一个)
NOT 或 ! 非,不是
其他 功能
BETWEEN…AND… 在某个范围之间(含最小、最大值)
IN(…) 在in之后的列表中的值,多选一
LIKE 模糊匹配(_匹配单个字符,%匹配任意个字符)
IS [NOT] NULL 是 NULL

(我这就不一一演示了)

1647167652604

1647167662947

1647167821591

1647167831035

1647168231173

1647168246478

1647233875747

1647233884999

聚合函数(统计函数)

SQL 允许对表中的数据进行计算,将一列数据作为一个整体,进行纵向计算。

函数名 作用
MAX(column) 返回某列的最低值(没有则返回NULL)
MIN(column) 返回某列的最高值(没有则返回NULL)
COUNT(column) 返回某列的行数(不包括 NULL 值)
COUNT(*) 返回被选列行数(包括NULL)
SUM(column) 求和
AVG(column) 求平均值

其中 COUNT 函数可用于任何数据类型 (因为它只是计数),而 SUM 、AVG 函数都只能对数值类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。

1647234145248

1647234152224

1647234214974

1647234221662

1647234263014

1647234272733

分组查询

1.统计函数一般是搭配分组查询;但是单独使用的情况一定是有的。

那么什么是分组呢?**

分组这个概念在生活中其实是很常见的,比如有以下需求:

  • 1.在一个班级之中,要求男女各一组进行辩论赛
  • 2.在公司中,要求每个部门一组进行拔河比赛

对于第一个需求,假设存在学生表,那么在学生表之中一定会存在一个性别字段,性别只可能是男或者女。

而在公司之中,如果要进行部门分组,肯定需要一个部门列的内容存在重复。

分组只对数据有重复的字段才有意义。

语法

SELECT 分组字段/聚合函数 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后条件];

1647235078407

1647235086422

1647318763849

1647318773968

查询需求:

注意事项**

  1. 如果一个查询之中不存在GROUP BY子句,那么在SELECT子句之中只允许出现统计函数,其他任何字段都不允许出现。
#错误的语句
SELECT ename,COUNT(job) FROM emp;
#正确的语句
SELECT COUNT(job) FROM emp;
  1. 在统计查询之中(存在GROUP BY子句),SELECT子句之中只允许出现分组字段(GROUP BY之后定义的字段)和统计函数,其他的任何字段都不允许出现。
#错误的语句
SELECT ename,COUNT(job) FROM emp GROUP BY job;
#正确的语句
SELECT deptno,COUNT(job) FROM emp GROUP BY job;

在以后进行分组操作的时候,本着一个原则:GROUP BY子句之中允许出现的字段才是SELECT子句中允许出现的字段。

1647319046295

1647319053952

1647319502295

1647319533350

WHERE和HAVING区别

  • WHERE:是在分组之前使用(可以没有GROUP BY),不允许使用统计函数;
  • HAVING:是在分组之后使用(必须结合GROUP BY),允许使用统计函数。

排序查询

通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。

在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格进行排序;在医院的挂号系统中,可以按照挂号的先后顺序进行排序等。

语法

SELECT 字段名 FROM 表名 ... ORDER BY 排序字段名 [ASC|DESC];

语法说明:

  • 排序字段名:表示需要排序的字段名称,多个字段时用逗号隔开。
  • ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC为默认值。

特点

  • ORDER BY子句一般放到查询语句的最后面,LIMIT字句除外。
  • 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待。
  • ORDER BY 指定多个字段进行排序时,MySQL 会按照字段的顺序从左到右依次进行排序。
  • 注意:在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。

1647320395426

1647320405760

1647321211552

1647321219004

分页查询

对于比较多的数据,如果在一个页面全部显示,查看起来会眼花缭乱。如果能进行分页显示,将更加快捷、清新的浏览!

image-20220307162625907

语法

SELECT 字段名 FROM 表名 LIMIT 起始索引,查询记录数;

特点

  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数;
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为LIMIT 10。

1647321566452

1647321574062

1647322165356

1647322174388


文章作者: hehe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hehe !
  目录
​ ​