OldWang带你了解MySQL(八)

news2024/12/24 8:23:40

文章目录

    • 🔥聚合函数
    • 🔥AVG 和 SUM 函数
    • 🔥MIN 和 MAX 函数
    • 🔥COUNT 函数
    • 🔥数据分组(GROUP BY)
    • 🔥在多列上使用分组
    • 🔥约束分组结果(HAVING)
    • 🔥子查询
    • 🔥单行子查询
    • 🔥多行子查询

🔥聚合函数

聚合函数介绍在这里插入图片描述

聚合函数
聚合函数也称之为多行函数,组函数或分组函数。聚合函数不象单行函数,聚合函数对行的分组进行操作,对每组给出一个结果。如果在查询中没有指定分组,那么聚合函数则将查询到的结果集视为一组。

聚合函数类型
在这里插入图片描述

聚合函数说明:

函数名描述
AVG(expression)返回一个表达式的平均值,expression 是一个字段
COUNT(expression)返回查询的记录总数,expression 参数是一个字段或者 * 号
MAX(expression)返回字段 expression 中的最大值
MIN(expression)返回字段 expression 中的最小值
SUM(expression)返回指定字段的总和

聚合函数使用方式
在这里插入图片描述

使用聚合函数的原则

⭐ DISTINCT 使得函数只考虑不重复的值;

⭐ 所有聚合函数忽略空值。为了用一个值代替空值,用 IFNULL 或 COALESCE 函数。

🔥AVG 和 SUM 函数

AVG(arg)函数

● 对分组数据做平均值运算。
● arg:参数类型只能是数字类型。

SUM(arg)函数

● 对分组数据求和。
● arg:参数类型只能是数字类型。

🔥MIN 和 MAX 函数

MIN(arg)函数

● 求分组中最小数据。
● arg:参数类型可以是字符、数字、 日期。

MAX(arg)函数
● 求分组中最大数据。
● arg:参数类型可以是字符、数字、 日期。

🔥COUNT 函数

返回分组中的总行数。

COUNT 函数有三种格式:
● COUNT(*):返回表中满足 SELECT 语句的所有列的行数,包括重复行,包括有空值列的行。

● COUNT(expr):返回在列中的由 expr 指定的非空值的数。

● COUNT(DISTINCT expr):返回在列中的由 expr 指定的唯一的非空值的数。

使用 DISTINCT 关键字

● COUNT(DISTINCT expr) 返回对于表达式 expr 非空并且值不相同的行数显示 EMPLOYEES 表中不同部门数的值

组函数和 Null 值

在组函数中使用 IFNULL 函数

SELECT AVG(IFNULL(commission_pct, 0)) FROM employees;

🔥数据分组(GROUP BY)

创建数据组
在这里插入图片描述
创建数据组

在没有进行数据分组之前,所有聚合函数是将结果集作为一个大的信息组进行处理。但是,有时,则需要将表的信息划分为较小的组,可以用 GROUP BY 子句实现。

GROUP BY 子句语法
在这里插入图片描述

原则
⭐ 使用 WHERE 子句,可以在划分行成组以前过滤行。
⭐ 如果有WHERE子句,那么GROUP BY 子句必须在WHERE的子句后面。
⭐ 在 GROUP BY 子句中必须包含列。

使用 GROUP BY 子句
在这里插入图片描述

GROUP BY 子句

下面是包含一个 GROUP BY 子句 SELECT 语句的求值过程:
⭐ SELECT 子句指定要返回的列:
⭐ 在 EMPLOYEES 表中的部门号

− GROUP BY 子句中指定分组的所有薪水的平均值
− FROM 子句指定数据库必须访问的表:EMPLOYEES 表。

⭐ WHERE 子句指定被返回的行。因为无WHERE 子句默认情况下所有行被返回。
⭐ GROUP BY 子句指定行怎样被分组。行用部门号分组,所以 AVG 函数被应用于薪水列,以计算每个部门的平均薪水。

🔥在多列上使用分组

在这里插入图片描述

在组中分组

可以列出多个 GROUP BY 列返回组和子组的摘要结果。可以用 GROUP BY子句中的列的顺序确定结果的默认排序顺序。下面是图片中的 SELECT 语句中包含一个 GROUP BY 子句时的求值过程:

⭐ SELECT 子句指定被返回的列:

− 部门号在 EMPLOYEES 表中
− Job ID 在 EMPLOYEES 表中
− 在 GROUP BY 子句中指定的组中所有薪水的合计

⭐ FROM 子句指定数据库必须访问的表:EMPLOYEES 表。
⭐ GROUP BY 子句指定你怎样分组行:

− 首先,用部门号分组行。
− 第二,在部门号的分组中再用 job ID 分组行。

如此 SUM 函数被用于每个部门号分组中的所有 job ID 的 salary 列。

🔥约束分组结果(HAVING)

在这里插入图片描述

HAVING 子句

HAVING 子句是对查询出结果集分组后的结果进行过滤。

约束分组结果
用 WHERE 子句约束选择的行,用 HAVING 子句约束组。为了找到每个部门中的最高薪水,而且只显示最高薪水大于 $10,000 的那些部门,可以象下面这样做:

1.用部门号分组,在每个部门中找最大薪水。
2.返回那些有最高薪水大于 $10,000 的雇员的部门
SELECT department_id, MAX(salary) 
FROM employees GROUP BY department_id HAVING
MAX(salary)>10000 ;

HAVING子句语法
在这里插入图片描述

🔥子查询

子查询介绍
在这里插入图片描述
用子查询解决问题

假如要写一个查询来找出挣钱比 Abel 的薪水还多的人。为了解决这个问题,需要两个查询:一个找出 Abel 的收入,第二个查询找出收入高于 Abel 的人。可以用组合两个查询的方法解决这个问题。内查询或子查询返回一个值给外查询或主查询。使用一个子查询相当于执行两个连续查询并且用第一个查询的结果作为第二个查询的搜索值。

子查询语法
在这里插入图片描述

子查询
子查询是一个 SELECT 语句,它是嵌在另一个 SELECT 语句中的子句。使用子查询可以用简单的语句构建功能强大的语句。

可以将子查询放在许多的 SQL 子句中,包括:

⭐ WHERE 子句
⭐ HAVING 子句
⭐ FROM 子句

使用子查询
在这里插入图片描述

使用子查询的原则

⭐ 子查询放在圆括号中。
⭐ 将子查询放在比较条件的右边。
⭐ 在单行子查询中用单行运算符,在多行子查询中用多行运算符。

子查询类型
在这里插入图片描述

🔥单行子查询

在这里插入图片描述

单行子查询

单行子查询是从内查询返回一行的查询。在该子查询类型中用一个单行操作符。

🔥多行子查询

在这里插入图片描述

多行子查询

子查询返回多行被称为多行子查询。对多行子查询要使用多行运算符而不是单行运算符。

使用ANY运算符
在这里插入图片描述

ANY 运算符

ANY 运算符比较一个值与一个子查询返回的任意一个值。

⭐ < ANY 意思是小于最大值。
⭐ > ANY 意思是大于最小值。
⭐ = ANY 等同于 IN。

使用ALL运算符
在这里插入图片描述

ALL 运算符比较一个值与子查询返回的全部值。

⭐ < ALL 意思是小于最小值。
⭐ > ALL 意思是大于最大值,

NOT 运算符可以与 IN运算符一起使用。

子查询中的空值
在这里插入图片描述

内查询返回的值含有空值,并因此整个查询无返回行,原因是用大于、小于或不等于比较Null值,都返回null。所以,只要空值可能是子查询结果集的一部分,就不能用 NOT IN 运算符。NOT IN 运算符相当于 <> ALL。

注意,空值作为一个子查询结果集的一部分,如果使用 IN 操作符的话,不是一个问题。
IN 操作符相当于=ANY。
SELECT emp.last_name 
FROM employees emp WHERE emp.employee_id IN (SELECT mgr.manager_id 
FROM employees mgr);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417327.html

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

相关文章

4月数据结构面试复习

目录 字节数 (278条消息) 数据结构保研面试题整理&#xff08;自用&#xff09;_推免面试数据结构问题_乌鸡摸鱼的博客-CSDN博客 https://zhuanlan.zhihu.com/p/138046349https://zhuanlan.zhihu.com/p/255030352计算机数据结构面试常问问题&#xff08;适合考研复试&#xff…

Redis7

Redis之父安特雷兹 Redis7概述 Redis:Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c;例如String、Hash、List、Set、SortedSet等等。数据是存在内…

云原生个人线路 Docker容器化

声明&#xff1a;此文章为博主个人学习记录&#xff0c;仅供学习和交流&#xff0c;如有侵权请联系博主。 Docker 基于Linux 内核的Cgroup&#xff0c;Namespace&#xff0c;以及Union FS等技术&#xff0c;对进程进行封装隔离&#xff0c;属于操作系统层面的虚拟化技术&#x…

Windows权限提升—MySQL数据库提权

Windows权限提升—MySQL数据库提权1. 前言2. 数据库提权介绍2.1. 常见数据库端口2.2. MySQL数据库提权条件2.3. MySQL数据库提权类型3. MySQL中UDF提权3.1. UDF提权介绍3.2. UDF提权思路3.3. UDF提权步骤3.3.1. 获取外连数据库3.3.1.1. 外连数据库3.3.1.2. 连接数据库3.3.1.3. …

python+vue 基于推荐算法的在线电影视播放网站

以广大影视剧迷们为研究对象&#xff0c;深入了解影视剧迷对在线视频观看视频的需求进行分析&#xff0c;形成系统需求分析设计一个符合影视剧迷们需求的在线视频网站。设计网站的前期工作包括对系统的各个功能进行详细分析&#xff0c;对数据库设计进行详细的描述&#xff0c;…

hadoop之MapReduce框架原理

目录 MapReduce框架的简单运行机制&#xff1a; Mapper阶段&#xff1a; InputFormat数据输入&#xff1a; 切片与MapTask并行度决定机制&#xff1a; job提交过程源码解析&#xff1a; 切片逻辑&#xff1a; 1&#xff09;FileInputFormat实现类 进行虚拟存储 &#x…

9.Nuxt.js的使用

九.Nust.js的使用 1.什么是SEO 2.百度的搜索结果 3.服务器端和客户端渲染 4.Nuxt.js技术简介 5.Nuxt.js的路由&#xff08;使用提供的nuxt-app项目初始化&#xff09; 6.Nuxt.js的页面布局和整体配置 7.Nuxt.js整合axios 九.Nust.js的使用 1.什么是SEO ①SEO SEO是通…

elasticSearch数据存储与搜索基本原理

1.缘起&#xff1a; 为啥想学习es&#xff0c;主要是在工作中会用到&#xff0c;但是因为不了解原理&#xff0c;所以用起来畏手畏脚的&#xff0c;就想了解下es是怎么存储数据&#xff0c;以及es是怎么搜索数据的&#xff0c;我们平时应该如何使用es&#xff0c;以及使用时候…

springboot+jwt令牌简单登录案例

1. 什么是JWT&#xff1f;JSON Web Token JSON Web Token (JWT)是⼀个开放标准(RFC 7519)&#xff0c;它定义了⼀种紧凑的、⾃包含的⽅式&#xff0c;⽤于 作为JSON对象在各⽅之间安全地传输信息。该信息可以被验证和信任&#xff0c;因为它是数字签名的。 1.1 什么时候应该⽤…

【Linux】应用层协议—http

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…

DevData Talks | 微众银行有哪些研发效能实践与思考?一起来拓展认知边界!

本期 DevData Talks 直播活动中&#xff0c;我们非常高兴地邀请到了微众银行研发效能负责人余伟老师与我们分享微众银行在研发效能实践方面的经验与方法。 微众银行是一家面向互联网的银行&#xff0c;从诞生之日起就一直致力于快速迭代、稳健可靠的业务支持。面对金融和互联网…

ORACLE EBS 系统架构与应用实践(二)

四、ORACLE EBS的系统集成性 这里的所谓系统“集成性”&#xff0c;既非指“技术层面”的集成&#xff0c;也非指模块“应用层面”的集成&#xff0c;而是指企业管理发展过程中内在“核心要素”的集成。有人以为&#xff0c;一个ERP产品所包含的模块数量足够多、企业上线的模块…

【大数据基础】基于信用卡逾期数据的Spark数据处理与分析

https://dblab.xmu.edu.cn/blog/2707/ 实验过程 数据预处理 本次实验数据集来自和鲸社区的信用卡评分模型构建数据&#xff0c;以数据集cs-training.csv为分析主体&#xff0c;其中共有15万条记录&#xff0c;11列属性。 每个数据包含以下字段&#xff1a; 字段名称 字段含义…

【PyTorch】第四节:梯度下降算法

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;PyTorch 描述&#x1f3a8;&#xff1a;PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算数&#…

java--HtmlUnit--模拟浏览器操作--自动化操作浏览器--自动登录校园网为案例

写在前面&#xff1a; 闲来无事&#xff0c;因为宿舍每次嫌登录校园网有点免费。然后想着能不能一键自动化实现。然后更麻烦了&#xff0c;哈哈哈。不过倒是写一次代码就可以了。 可能不是特别系统&#xff0c;因为资料太少了。都是案例驱动找的资料。花了3大节课才搞完了。 会…

Redis运维之swap影响及解决方案

一、操作系统SWAP swap空间对于操作系统来说比较重要&#xff0c;当我们使用操作系统的时候&#xff0c;如果系统内存不足&#xff0c;常常会将一部分内存数据页进行swap操作&#xff0c;以解决临时的内存困境。swap空间由磁盘提供&#xff0c;对于高并发场景下&#xff0c;sw…

全球土壤湿度数据获取方法

土壤湿度亦称土壤含水率&#xff0c;表示土壤干湿程度的物理量。是土壤含水量的一种相对变量。通常用土壤含水量占干土重的百分数是示&#xff0c;亦称土壤质量湿度&#xff0c;如用土壤水分容积占土壤总容积的百分数表示&#xff0c;则称土壤容积湿度。通常说的土壤湿度&#…

Vivado中VIO IP核的使用

Vivado中VIO IP核的使用一、写在前面二、VIO IP核配置三、VIO联调四、写在后面一、写在前面 Vivado中的VIO&#xff08;Virtual Input/Output&#xff09; IP核是一种用于调试和测试FPGA设计的IP核。它允许设计者通过使用JTAG接口读取和写入FPGA内部的寄存器&#xff0c;从而检…

【JavaEE】关于synchronized总结-Callable用法及JUC的常见问题

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶synchronized原理是什么&#xff1f;synchronized到底有什么特点&#xff0c;synchronized的锁策略是什么&#xff0c;是怎么变化的呢&#xff1f;本篇文章总结出, Synchronized 具有以下特性…

【Java|golang】1041. 困于环中的机器人

在无限的平面上&#xff0c;机器人最初位于 (0, 0) 处&#xff0c;面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一&#xff1a; “G”&#xff1a;直走 1 个单位 “L”&…