当前位置: 首页 > news >正文

【MySQL】数据库必考知识点:查询操作全面详解与深度解剖

        前言:本节内容讲述基本查询, 基本查询要分为两篇文章进行讲解。 本篇文章主要讲解的是表内删除数据、查询结果进行插入、聚合统计、分组聚合统计。 如果想要学习对应知识的可以观看哦。

        ps:本篇内容友友们只要会创建表了就可以看起来了哦!!!

目录

删除数据

delete from

truncate

插入查询结果

创建空表

去重

插入新表

更换旧表

重命名

聚合函数

group by分组聚合查询        

根据部门列出最高薪资和平均薪资

根据部门和工作列出最低薪资和平均薪资

显示平均工资低于2000的部门和他的平均工资

having 和 where的区别


删除数据

delete from

delete from 表名 (where筛选) (排序)(limit);

       下面为示例: 

        如果不加where筛选就会将全部的表删除, 所以要使用where语句进行筛选, 删除某一条:

delete from exam_result where id = 6;

        另外, 还有一点需要注意的就是, delete 操作不会影响自增约束的字段。就比如一个表里面有一个id列, 这个列的约束是auto_increment。 当我们插入了3个数据后, 这个id自增就会增长到4, 如果这个时候我们将三个数据删除, 这个自增数不会重置, 还是4。 也就是不会影响自增。

         下面为示例:

create table for_delete( id int primary key auto_increment, name varchar(20) );
insert into for_delete(name) values('张三');
insert into for_delete(name) values('张三');
insert into for_delete(name) values('张三');

然后将整个表删除,再进行插入:

truncate

        想要将auto_increment清空, 就可以使用截断表:

create table for_truncate( id int primary key auto_increment, name varchar(20) );
insert into for_truncate(name) values('张三');
insert into for_truncate(name) values('张三');
insert into for_truncate(name) values('张三');

然后我们截断表:

truncate 表名;

        ps:其实truncate和delete from也有其他的区别, 但是博主没有学习过事务, 对于它们之间的更深度的区别理解不了。 有兴趣的友友们可以自行查阅。

插入查询结果

        插入查询结果我们使用一个案例来进行理解, 就是对一个表进行去重。

将select和insert做组合。 现在进行一个案例:

create table duplicate_table( id int, name varchar(20) );
insert into duplicate_table values(100, 'aaa'), (200, 'bbb'), (100, 'aaa'), (200, 'bbb'), (200, 'bbb'), (300, 'ccc');

然后想要对上图的数据进行去重, 需要五步:

        第一步:创建一个空表, 空表的表结构和我们上面的表的结构一样。 

        第二步:通过select 筛选出去重后的查找结果。

        第三步:将查找结果直接插入到新的空表当中。

        第四步:重命名原表

        第五步:重命名新创建的表。 

创建空表

        首先创建一个空表, 这个空表和原本的表是一样的:

去重

        然后将原表中的去重后的结果筛选出来:

插入新表

        然后将这个结果插入到新的空表当中:

更换旧表

    然后rename旧的表变成old_duplicate_table:

重命名

        最后rename新的去重后的表:

        以上就能对一个表内的数据进行去重。 

        为什么最后是使用rename方式进行的?这是因为就是相等一切都已经就绪了, 然后统一放入,更新, 生效等。 

聚合函数

        mysql当中也是有函数的, 这些函数是可以直接被我们调用的。 我们可以对一组数据进行聚合统计, 而使用的就是聚合函数

下面是几个聚合函数:

  •         count : 返回查询到的数据的数量。
  •         sum : 返回查询到的若干列的总和,
  •         avg : 返回特定数据的平均值。
  •         max : 返回数据的平均值。
  •         min : 返回数据的最小值。 

        下面进行示例:

        如果我们使用count计算*, 那么就是返回一共有多少行数据。 

        统计数学成绩的个数:

        但是有些同学的数学成绩是相同的。 我们想要统计不同的数学的成绩的个数, 也就是对数学成绩进行去重。 所以为了能够得到不一样的数学成绩, 就要使用distinct:

        想要统计班级中, 数学成绩不及格的人:

查看三个成绩的平均分:

select avg(english + chinese + math) 平均分 from exam_result;

查找数学超过50分的数学最少的同学:

group by分组聚合查询        

        分组的目的是为了分组之后, 方便进行聚合统计。我们下面使用员工数据库的示例进行理解, 整个员工数据库可以在网络上面找一下

        我们先来看一下这三张表:

        我们使用对应这个数据库, 然后就能看到下面这三张表: 

        下面这是里面的所有员工, 属性包括员工的姓名、员工的工作、员工的工号、员工的时间、员工的工资、员工的奖金、员工的所属部门:

         下面是所有的部门, 属性包括部分的名称, 部门的地点:

         下面是所有的薪资等级:

根据部门列出最高薪资和平均薪资

select max(sal) 最高, avg(sal) 平均, from emp; //这是一张表的聚合统计。select deptno, max(sal) 最高, avg(sal) 平均, from emp group by deptno;//然后分组,再聚合统计。  //分组的时候要明确列名,但实际分组是用该列的不同的行进行分组的。分组的条件比如deptno,在组内一定是相同的---可以被聚合压缩。并且, 分组, 就是把一组按照条件拆成了多个组,进行各自组内的统计, 就是把一个表, 在逻辑上拆成了多个子表,然后对多个子表进行聚合统计。

根据部门和工作列出最低薪资和平均薪资

select deptno, job, avg(sal) 平均, min(sal) 最低 from emp group by deptno, job;

         这里要讨论的是, 如果我们这里select后面跟enamel, 请问可不可以呢? 

        答案是不可以, 因为对于ename来说, ename不是被分组的数据, 对于分组聚合统计,只有聚合统计的以及分组的可以被查看, 其他的, 都不可以查看。 

显示平均工资低于2000的部门和他的平均工资

        我们就要先统计出每个部门的平均工资(结果先聚合出来), 再进行判断(对聚合出来的结果进行判断)。(这里要用到一个新的函数——having:对聚合后的数据进行统计)

        先统计所有的部门:

select deptno, avg(sal) 平均工资 from emp group by deptno;

        然后再对上面的聚合结果进行筛选(利用having, 对聚合统计的结果进行判断, 所以having的执行顺序在最后)

select deptno, avg(sal) 平均工资 from emp group by deptno having 平均工资 < 2000;

having 和 where的区别

        having和where都能做条件筛选, 但是这两个是完全不同的。

        我们利用下面的这个例子进行理解。 首先, 我们查出员工表里面不是SMITH的人:

        然后将这些数据按照部门, 工作进行分组:

        然后做聚合统计, 统计平均工资:

        然后筛选出平均工资小于2000的那些:

然后我们就开始讲解上面的例子了:

        首先, 这里的where, 是对具体的任意列进行条件筛选。having是对分组聚合之后的结果进行条件筛选。所以, 这里面的一定是from第一执行, where 第二执行, 分组第三执行, 聚合统计第四执行, 筛选统计结果第五执行。

  •         所以, where 和 having的第一个区别就是条件筛选的阶段是不同的!
  •         第二个区别:不要认为只有磁盘上真实的表结构才是表, 我们筛选条件, 或者执行各种语句之中, 中间筛选出来的, 包括最终结果, 在我看来,全部都是逻辑上的表。“MySQL一切皆表“——未来只要我们能够处理好单表的CURD, 所有的sql场景,我们全部都能利用统一的方式进行!

  ——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!    

相关文章:

【MySQL】数据库必考知识点:查询操作全面详解与深度解剖

前言&#xff1a;本节内容讲述基本查询&#xff0c; 基本查询要分为两篇文章进行讲解。 本篇文章主要讲解的是表内删除数据、查询结果进行插入、聚合统计、分组聚合统计。 如果想要学习对应知识的可以观看哦。 ps:本篇内容友友们只要会创建表了就可以看起来了哦&#xff01;&am…...

鲸鱼机器人和乐高机器人的比较

鲸鱼机器人和乐高机器人各有其独特的优势和特点&#xff0c;家长在选择时可以根据孩子的年龄、兴趣、经济能力等因素进行综合考虑&#xff0c;选择最适合孩子的教育机器人产品。 优势 鲸鱼机器人 1&#xff09;价格亲民&#xff1a;鲸鱼机器人的产品价格相对乐高更为亲民&…...

游戏引擎学习第15天

视频参考:https://www.bilibili.com/video/BV1mbUBY7E24 关于游戏中文件输入输出&#xff08;IO&#xff09;操作的讨论。主要分为两类&#xff1a; 只读资产的加载 这部分主要涉及游戏中用于展示和运行的只读资源&#xff0c;例如音乐、音效、美术资源&#xff08;如 3D 模型和…...

详解模版类pair

目录 一、pair简介 二、 pair的创建 三、pair的赋值 四、pair的排序 &#xff08;1&#xff09;用sort默认排序 &#xff08;2&#xff09;用sort中的自定义排序进行排序 五、pair的交换操作 一、pair简介 pair是一个模版类&#xff0c;可以存储两个值的键值对.first以…...

AI驱动的桌面笔记应用Reor

网友 竹林风 说&#xff0c;已经成功的用 mxbai-embed-large 映射到 text-embedding-ada-002&#xff0c;并测试成功了。不愧是爱折腾的人&#xff0c;老苏还没时间试&#xff0c;因为又找到了另一个支持 AI 的桌面版笔记 Reor Reor 简介 什么是 Reor ? Reor 是一款由人工智…...

搜维尔科技:使用sensglove触觉反馈手套进行虚拟拆装操作

使用sensglove触觉反馈手套进行虚拟拆装操作 搜维尔科技&#xff1a;使用sensglove触觉反馈手套进行虚拟拆装操作...

深入理解电子邮件安全:SPF、DKIM 和 DMARC 完全指南

引言 在当今数字时代&#xff0c;电子邮件已经成为我们日常通信中不可或缺的一部分。然而&#xff0c;随之而来的安全问题也日益突出。邮件欺诈、钓鱼攻击和垃圾邮件等威胁不断增加&#xff0c;这促使了多种邮件安全验证机制的出现。本文将深入探讨三个最重要的邮件安全协议&a…...

【有啥问啥】复习一下什么是NMS(非极大值抑制)?

复习一下什么是NMS&#xff08;非极大值抑制&#xff09;&#xff1f; 什么是NMS&#xff1f; NMS&#xff08;Non-Maximum Suppression&#xff09;即非极大值抑制&#xff0c;是一种在计算机视觉领域&#xff0c;尤其是目标检测任务中广泛应用的后处理算法。其核心思想是抑…...

Java-异步方法@Async+自定义分布式锁注解Redission

如果你在使用 @Async 注解的异步方法中,使用了自定义的分布式锁注解(例如 @DistributedLock),并且锁到期后第二个请求并没有执行,这可能是由于以下几个原因导致的: 锁的超时时间设置不当:锁的超时时间可能设置得太短,导致锁在业务逻辑执行完成之前就已经自 动释放。…...

基本定时器---内/外部时钟中断

一、定时器的概念 定时器&#xff08;TIM&#xff09;&#xff0c;可以对输入的时钟信号进行计数&#xff0c;并在计数值达到设定值的时候触发中断。 STM32的定时器系统有一个最为重要的结构是时基单元&#xff0c;它由一个16位计数器&#xff0c;预分频器&#xff0c;和自动重…...

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法&#xff1a;一种是基于Canny边缘检测与轮廓分析的方法&#xff0c;另一种是使用TensorFlow加载预训练SSD&#xff08;Single Shot Multibox Detector&#xff09;模型进行物体检测。 1. Canny边缘检测与轮廓分析&#xff1a; …...

如何在MindMaster思维导图中制作PPT课件?

思维导图是一种利用色彩、图画、线条等图文并茂的形式&#xff0c;来帮助人们增强知识或者事件的记忆。因此&#xff0c;思维导图也被常用于教育领域&#xff0c;比如&#xff1a;教学课件、读书笔记、时间管理等等。那么&#xff0c;在MindMaster免费思维导图软件中&#xff0…...

ORIN NX 16G安装中文输入法

刷机版本为jetpack5.14.刷机之后预装了cuda、cudnn、opencv、tensorrt等&#xff0c;但是发现没有中文输入&#xff0c;所以记录一下安装流程。 jetson NX是arm64架构的&#xff0c;sougoupinyin只支持adm架构的&#xff0c;所以要选择安装Google pinyin 首先打开终端&#x…...

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段&#xff1a; AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…...

退款成功订阅消息点击后提示订单不存在

问题表现&#xff1a; 退款成功发送的小程序订阅消息点击进入后提示订单不存在。 修复方法&#xff1a; 1.打开文件app/services/message/notice/RoutineTemplateListService.php 2.找到方法sendOrderRefundSuccess 3.修改图中红圈内的链接地址 完整方法代码如下 /*** 订…...

实验一 顺序结构程序设计

《大学计算机&#xfe63;C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 &#xff08;1&#xff09;掌握C语言中常量和变量的概念。 &#xff08;2&#xff09;掌握C语言中常见的数据类型。 &#xff08;3&#xff09;掌握C语言中变量的定义和赋值方法。 …...

Elasticsearch搜索流程及原理详解

Elasticsearch搜索流程及原理详解 1. Elasticsearch概述1.1 简介1.2 核心特性1.3 应用场景2. Elasticsearch搜索流程2.1 搜索请求的发起2.2 查询的执行2.3 结果的聚合与返回3. Elasticsearch原理详解3.1 倒排索引3.2 分布式架构3.3 写入流程3.4 读取流程4. 技术细节与操作流程4…...

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…...

【gitlab】gitlabrunner部署

1、下载镜像 docker pull gitlab/gitlab-runner:latest 2、启动gitrunner容器 docker run -d --name gitlab-runner --restart always \ -v /root/gitrunner/config:/etc/gitlab-runner \ ///gitlab-runner的配置目录&#xff0c;挂载在宿主机上方便修改,里面有config.…...

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...