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

news2024/12/24 2:59:50

数据库(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.coloradmin.cn/o/1638854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试经典 150 | 数组】接雨水

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;预处理方法二&#xff1a;单调栈方法三&#xff1a;双指针 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff…

【大模型学习】Transformer(学习笔记)

Transformer介绍 word2vec Word2Vec是一种用于将词语映射到连续向量空间的技术&#xff0c;它是由Google的Tomas Mikolov等人开发的。Word2Vec模型通过学习大量文本数据中的词语上下文信息&#xff0c;将每个词语表示为高维空间中的向量。在这个向量空间中&#xff0c;具有相似…

【C++】学习笔记——string_2

文章目录 六、string类2. 反向迭代器const迭代器 string类对象的容量操作&#xff08;补&#xff09;size() 3. string类的元素访问4. string类的修改 未完待续 结合文档食用~ 六、string类 2. 反向迭代器 一般来说&#xff0c;迭代器都是正向的遍历容器&#xff0c;虽然可以…

LuaJIT源码分析(三)字符串

LuaJIT源码分析&#xff08;三&#xff09;字符串 要表示一个字符串&#xff0c;核心就是需要知道字符串的长度&#xff0c;以及存放字符串具体数据的地址。lua的字符串是内化不可变的&#xff0c;也就是lua字符串变量存放的不是字符串的拷贝&#xff0c;而是字符串的引用。那么…

C语言⼆级指针如何操作字符串数组(指针数组)?

一、问题 对于字符串数组该如何操作&#xff08;⽽且是使⽤指针数组存储&#xff09;&#xff1f; 二、解答 使⽤指针的指针实现对字符串数组中字符串的输出。指向指针的指针即是指向指针数据的指针变量。这⾥创建⼀个指针数组 strings&#xff0c;它的每个数组元素相当于⼀个…

springcloud自定义全局异常

自行创建一个实体类 /*** 全局异常处理类**/ ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) ResponseBody public Result error(Exception e){e.printStackTrace(); return Result.fail();}/*** 自定义异常处理方法* param e * re…

神奇的Vue3 - 组件探索

神奇的Vue3 第一章 神奇的Vue3—基础篇 第二章 神奇的Vue3—Pinia 文章目录 神奇的Vue3了解组件一、注册组件1. 全局注册​2. 局部注册3. 组件命名 二、属性详解1. Props&#xff08;1&#xff09;基础使用方法&#xff08;2&#xff09;数据流向&#xff1a;单项绑定原则&…

深入图像分类:使用美国手语数据集训练定制化神经网络

引言 在前一篇博客中&#xff0c;我们探讨了如何使用MNIST数据集训练一个基础的神经网络来进行手写数字识别。在本文中&#xff0c;我们将更进一步&#xff0c;使用美国手语字母表&#xff08;ASL&#xff09;数据集来构建一个定制化的图像分类模型。通过这个过程&#xff0c;…

YOLOv9/YOLOv8算法改进【NO.128】 使用ICCV2023超轻量级且高效的动态上采样器( DySample)改进yolov8中的上采样

前 言 YOLO算法改进系列出到这&#xff0c;很多朋友问改进如何选择是最佳的&#xff0c;下面我就根据个人多年的写作发文章以及指导发文章的经验来看&#xff0c;按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通&#xff1a; 首推…

静态库、动态库回顾

回顾一下库相关的知识点&#xff0c;总结备忘一下。在某种情况下&#xff0c;你有了如下的代码&#xff0c;结构如下 //pra.h #include <stdio.h> void test_01(); //pra.c #include "pra.h" void test_01() {printf("xxxxxxx----->%s %s()\n",…

Docker 安装部署 postgres

Docker 安装部署 postgres 1、拉取 postgres 镜像文件 [rootiZbp19a67kznq0h0rgosuxZ ~]# docker pull postgres:latest latest: Pulling from library/postgres b0a0cf830b12: Pull complete dda3d8fbd5ed: Pull complete 283a477db7bb: Pull complete 91d2729fa4d5: Pul…

C#知识|汇总方法重载与静态方法应用技巧

哈喽&#xff0c;你好&#xff0c;我是雷工&#xff01; 今天学习C#方法重载与静态方法应用技巧的相关内容。 01 方法重载有什么好处&#xff1f; 1.1、可以有效的减少类的对外接口&#xff08;只显示一个方法比较简洁&#xff09;&#xff0c;从而降低类的复杂度。 1.2、方便…

ubuntu开启message文件

环境&#xff1a;ubuntu 20.04 1、首先需要修改 /etc/rsyslog.d/50-default.conf 文件&#xff1b;源文件中message被注释&#xff0c;如下图&#xff1a; 2、打开注释&#xff1a; 3、重启服务 systemctl restart rsyslog.service 如此即可&#xff01;

freeRTOS事件标志组(1-16)

def&#xff1a;事件标志组简介 事件标志位&#xff1a;用一个为来表示事件是否发生 事件标志组是事件标志位的集合可以简单的理解事件标志组&#xff0c;就是一个整数 事件标志组的特点: 1&#xff1a;它的每一个位表示一个事件&#xff08;高8位不算&#xff09; 2&#…

分布式与一致性协议之Raft算法与一致哈希算法(一)

Raft算法 Raft与一致性 有很多人把Raft算法当成一致性算法&#xff0c;其实它不是一致性算法而是共识算法&#xff0c;是一个Multi-Paxos算法&#xff0c;实现的是如何就一系列值达成共识。并且&#xff0c;Raft算法能容忍少数节点的故障。虽然Raft算法能实现强一致性&#x…

打印机-STM32版本 硬件部分

最终PCB EDA工程: 一、确定芯片型号 根据项目需求&#xff0c;梳理需要用到的功能&#xff0c; 电量检测&#xff1a;ADC 按键&#xff1a;IO input外部中断 LED&#xff1a;IO output 温度检测&#xff1a;ADC 电机控制&#xff1a;IO output 打印通讯&#xff1a;SPI …

HarmaonyOS鸿蒙应用科普课

一、什么是鸿蒙OS&#xff1f; 1.概念&#xff1a; 先给大家讲讲今天讲课的主题&#xff0c;鸿蒙OS是什么&#xff1f;鸿蒙系统大家都知道&#xff0c;就是一个操作系统&#xff0c;我们未来是为的成为鸿蒙程序员。所以我们不要将鸿蒙os完全等同于手机操作系统&#xff0c;太…

笔记:编写程序,绘制一个展示支付宝月账单报告的饼图,

文章目录 前言一、饼图是什么&#xff1f;二、分析题目三、编写代码总结 前言 编写程序&#xff0c;绘制一个展示支付宝月账单报告的饼图&#xff0c;实现过程如下&#xff1a; &#xff08;1&#xff09; 导入 matplotlib.pyplot 模块&#xff1b; &#xff08;2&#xff09;…

前端业务开发中使用原生js和elementui两种方式实现头像裁切上传的功能

日常业务开发中&#xff0c;无论是后台管理系统还是前台界面&#xff0c;都会遇到图片裁剪的业务需求&#xff0c;选择合适的尺寸或者图片的关键部分&#xff0c;满足我们的功能需求&#xff01;&#xff01; 效果预览 效果一&#xff1a; 效果二: 实现过程 1.原生js实现方…

全栈开发之路——前端篇(2)文件、组件与setup引入

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 本文系该系列第二篇&#xff0c;主要将介绍各个文件的意义、组件结构与导入以及setup的引入。 目录 一、src外文件介绍.gitignore为git忽略文件env.d.ts用于识别其他文件index.htmljson文件vite.confi…