数据库(MySQL)—— DQL语句(聚合,分组,排序,分页)

ops/2024/10/11 13:23:28/

数据库(MySQL)—— DQL语句(聚合,分组,排序,分页)

  • 聚合函数
    • 常见的聚合函数
    • 语法
  • 分组查询
    • 语法
  • 排序查询
    • 语法
  • 分页查询
    • 语法
  • DQL的执行顺序

我们今天来继续学习MySQL的DQL语句的聚合和分组查询,如果没看过上一篇的可以点击这里:

https://blog.csdn.net/qq_67693066/article/details/138371612

聚合函数

聚合函数将将一列数据作为一个整体,进行纵向计算。

常见的聚合函数

函数功能
COUNT统计指定列或所有列的数量,返回行数
MAX返回指定列的最大值
MIN返回指定列的最小值
AVG计算指定列的平均值
SUM计算指定列的总和

语法

SELECT 聚合函数(字段列表) FROM 表名 ;

注意 : NULL值是不参与所有聚合函数运算的

比如:统计该企业员工数量:

select count(*) from emp; -- 统计的是总记录数
select count(idcard) from emp; -- 统计的是idcard字段不为null的记录数

执行第一条语句的结果:
在这里插入图片描述
执行第二条语句的结果:
在这里插入图片描述
为什么会差一呢?因为有一个员工的idcard为空:
在这里插入图片描述
统计该企业员工的平均年龄:

select avg(age) from emp;

在这里插入图片描述统计该企业员工的最大年龄:

select max(age) from emp;

在这里插入图片描述 统计西安地区员工的年龄之和:

select sum(age) from emp where workaddress = '西安';

在这里插入图片描述

分组查询

语法

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组
后过滤条件 ];

where与having区别

执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组
之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。

根据性别分组 , 统计男性员工 和 女性员工的数量:

-- 根据性别分组 , 统计男性员工 和 女性员工的数量
select gender, count(*) from emp group by gender ;

在这里插入图片描述我们可以修改一下条件:根据性别分组 , 统计在西安的男性员工 和 女性员工的数量:

select gender, count(*) from emp where workaddress = '西安' group by gender ;

在这里插入图片描述
统计各个工作地址上班的男性及女性员工的数量:

select workaddress, gender, count(*) '数量' from emp group by gender , workaddress;

在这里插入图片描述查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址:

select workaddress, count(*) address_count from emp where age < 45 group by
workaddress having address_count >= 3;

在这里插入图片描述

排序查询

排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序。

语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

排序方式:

ASC : 升序(默认值)
DESC: 降序

注意事项:

  • 如果是升序, 可以不指定排序方式ASC
  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

根据年龄对公司的员工进行升序排序:

select * from emp order by age asc;
select * from emp order by age;

在这里插入图片描述
根据入职时间, 对员工进行降序排序:

select * from emp order by entrydate desc;

在这里插入图片描述根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序:

select * from emp order by age asc , entrydate desc;

在这里插入图片描述

分页查询

分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台都需要借助于数据库的分页操作:

语法

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

注意事项:

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

查询第1页员工数据, 每页展示10条记录:

select * from emp limit 0,10;
select * from emp limit 10;

在这里插入图片描述
查询第2页员工数据, 每页展示10条记录 --------> (页码-1)*页展示记录数:

select * from emp limit 10,10;

在这里插入图片描述

DQL的执行顺序

我们之前写sql语句都只是按照编写顺序来书写的,但是实际执行的时候,并不是按照我们编写的顺序来执行的,而是有自己的执行顺序
在这里插入图片描述
我们可以来验证一下:

查询年龄大于15的员工姓名、年龄,并根据年龄进行升序排序。

select name , age from emp where age > 15 order by age asc;

我们可以用别名来证明,现在我们对emp取个别名,因为按照逻辑,先从from开始执行:

-- 给emp取一个别名em
select em.name ,em.age from emp em where em.age  > 15 order by em.age asc;

发现程序正常运行:
在这里插入图片描述

但是如果我们先给select中的age取了别名:
在这里插入图片描述

就会报错,说明select语句在from之后执行,但是如果是在order by里面使用就不会:
在这里插入图片描述这说明order by是在select之后执行的。


http://www.ppmy.cn/ops/39008.html

相关文章

20240503安装HEVC解码器播放H265格式的8K视频

20240503安装HEVC解码器播放H265格式的8K视频 2024/5/3 9:55 缘起&#xff1a;由于youtube支持8K视频了&#xff0c;想尝尝鲜&#xff01; 主摄像头当然是选择SONY的【夜摄/弱光场景】&#xff0c;根据优选&#xff0c;小米&#xff08;MI&#xff09;13Ultra 最佳了。 在开始播…

【Linux】简易进度条的实现

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中进度条的实现的相关内容。 如果看到最后您觉得这篇文章写得…

Java算法-力扣leetcode-58. 最后一个单词的长度

58. 最后一个单词的长度 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串 示例 1&#xff1a; 输入&#xff1a; s "Hello World…

华为 Huawei 交换机 配置 Dot1q 终结子接口实现同设备 VLAN 间通信示例

组网需求 企业的不同部门拥有相同的业务&#xff0c;如上网、 VoIP 等业务&#xff0c;且各个部门中的用户位于不同的网段。目前存在不同的部门中相同的业务所属的VLAN 不相同&#xff0c;现需要实现不同VLAN中的用户相互通信。 如 图 7-7 所示&#xff0c;部门 1 和部门 2 中…

elementui+vue通过下拉框多选字段进行搜索模糊匹配

从字典中选择的值为["01","03"],在最开始的时候进行的处理是类似于表单提交的时候将json对象转换成了String类型 nature:["01","03"] this.queryParams.nature JSON.stringify(this.queryParams.nature); mapper层 <if test&quo…

C++ primer plus习题集及解析第九章(内存模型和名字空间)

题目9.1&#xff1a; const int Len 40; struct golf {char fullname[Len];int handicap; }; void handicap(golf & g, int hc); void showgolf(const golf & g); int setgolf(golf & g); 上述函数将提示用户输入姓名和等级&#xff0c;并将它们存储在andy结构 中…

Mysql8本地安装

官网&#xff1a; https://www.mysql.com/ yum安装下载&#xff1a;https://dev.mysql.com/downloads/repo/yum/ 二进制安装下载&#xff1a;https://downloads.mysql.com/archives/community/ 安装包下载 yum安装下载 打开网址&#xff08;https://dev.mysql.com/downloads/r…

QT作业5

1、聊天室 服务器端 //头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QListWidget> #include <QMessageBox> #include <QDebug> #includ…