【MySQL基本查询(下)】

server/2024/9/23 10:19:53/

文章目录

  • 一、update
    • 案例
  • 二、Delete
    • 案例
    • 注意:delete 全表数据的行为慎用!
    • truncate
  • 三、插入查询结果
    • 案例
  • 四、了解一些函数
    • 1.count函数
    • 2.sum函数
    • 3. avg函数
    • 4.max函数
    • 5. min函数
  • 五、group by子句的使用
    • 案例
    • having和where


一、update

该关键字的功能就是更新指定表中指定的数据。

语法:

UPDATE table_name SET column = expr [, column = expr …]
[WHERE …] [ORDER BY …] [LIMIT …]

接着上一篇文章的表:
在这里插入图片描述

现在想更新孙悟空的数学成绩到100分。

mysql> update exam_result set math=100 where name = ‘孙悟空’;

案例

将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
mysql> update exam_result set math=60,chinese=70 where name = ‘曹孟德’;
在这里插入图片描述

将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
第一步:先找出这三名同学
mysql> select name,math,chinese + math + english as total from exam_result order by total limit 3 ;
第二步:将这三名同学的数学成绩加上30
mysql> update exam_result set math=math+30 order by chinese+math+english limit 3 ;

成绩修改前:
在这里插入图片描述

成绩修改后:
在这里插入图片描述

注意:不支持 math += 30 这种语法

将所有同学的语文成绩更新为原来的 2 倍
mysql> update exam_result set chinese = chinese*2;
在这里插入图片描述

注意:update更新全表的这条语句慎用。其危害不亚于delete表。

二、Delete

语法:

DELETE FROM table_name [WHERE …] [ORDER BY …] [LIMIT …]

注意区别于drop,drop是删除表结构的,不是删除表数据。

案例

删除孙悟空同学的考试成绩
mysql> delete exam_result where name = ‘孙悟空’;

在这里插入图片描述

注意:delete 全表数据的行为慎用!

准备一张测试表:

CREATE TABLE for_delete (
id int primary key auto_increment,
name varchar(20)
);
插入一些数据后:如下图

在这里插入图片描述
执行delete命令后,结果为空了。

但是这种删除表的方式,不会对表的自增式数据清空,比如上面表插入了三条信息,删除完后,再次插入信息,auto_increment约束记录的是从id=4开始的。
在这里插入图片描述

truncate

注意:这个操作慎用

  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事
    物,所以无法回滚
  3. 会重置 AUTO_INCREMENT 项

该关键字也能将表的内容删除。

truncate + 表名
删除表的所有数据。
不同于delete的是,这个truncate关键字,删除表的内容后,也会将自增键auto_increment的值清空,也就意味着下次插入的时候会从1开始自增。

在这里插入图片描述


三、插入查询结果

语法:

  • INSERT INTO table_name [(column [, column …])] SELECT …

也就是把 select 查询出来的结果进行插入。

案例

案例:删除表中的的重复复记录,重复的数据只能有一份。

首先创建原数据表 CREATE TABLE duplicate_table (id int, name varchar(20)); Query OK, 0 rows affected (0.01 sec)
再插入测试数据 INSERT INTO duplicate_table VALUES (100, ‘aaa’), (100, ‘aaa’), (200, ‘bbb’), (200, ‘bbb’), (200, ‘bbb’), (300, ‘ccc’); Query
OK, 6 rows affected (0.00 sec)Records: 6 Duplicates: 0 Warnings: 0

思路:

1)创建一个跟duplicate_table 相同类型的表格。
CREATE TABLE no_duplicate_table LIKE duplicate_table;
2)将duplicate_table的去重数据插入到no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;
3)通过重命名表,实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table,
no_duplicate_table TO duplicate_table;

最后结果如下:

在这里插入图片描述

其中上篇文章讲到,去重的关键字是distinct

四、了解一些函数

在这里插入图片描述

1.count函数

案例:统计班级共有多少同学。
select count(*) as 总数 from exam_result;

在这里插入图片描述

统计班级收集的 qq 号有多少
mysql> select count(qq) from students;
在这里插入图片描述

统计本次考试的数学成绩分数个数
mysql> select count(math) from exam_result; —统计的是统计的是全部成绩
mysql> select count(distinct math) from exam_result; —统计的是统计的是去重成绩

2.sum函数

一般用来统计总分。

案例:

统计班级数学总成绩
mysql> select sum(math) from exam_result;
在这里插入图片描述

3. avg函数

一般用来统计平均分。

案例:统计平均总分
mysql> select avg(chinese+math+english) as 平均总分 from exam_result;
在这里插入图片描述

4.max函数

可以用来统计最高分。

案例:统计全班英语最高分
mysql> select max(english) from exam_result;
在这里插入图片描述

5. min函数

一般统计最低(小)的分数。

案例:返回 > 70 分以上的数学最低分
mysql> select min(math) from exam_result where math > 70;在这里插入图片描述

五、group by子句的使用

在select中使用group by 子句可以对指定列进行分组查询

group by 的核心作用:为了分组之后,方便进行聚合统计。

语法:

  • select column1, column2, … from table group by column;

获取一张员工表,员工表的信息如下:
在这里插入图片描述

上面的员工信息表,可以看成一个大组。

给员工表按照deptno(department No. 部门)进行分组,结果如下:

mysql> select deptno,max(sal) as 最高工资 , avg(sal) as 平均工资 from emp group by deptno;

在这里插入图片描述

按照部门进行分组后,三个部门的的最高工资,平均工资就一目了然,这样就是按照要求进行分组了。

分组,就是把一组按照条件,拆分成多个组,进行各自组内的统计。
分组,也就是把一张表按照一定条件,拆分成多组,然后在每个组内进行聚合统计。

案例

显示每个部门的每种岗位的平均工资和最低工资
mysql> select deptno,job,min(sal), avg(sal) from emp group by deptno,job;
在这里插入图片描述

先分组统计每个部门的最低和平均工资,再对结果进行聚合。

having和where

having:对最后聚合出来的结果进行判断。

案例:列出表的信息,SMITH这名员工不参与统计。
mysql> select deptno,job,avg(sal) as myavg from emp where ename!=‘SMITH’ group by deptno,job having myavg < 2000;
在这里插入图片描述

对该SQL语句进行解读:

在这里插入图片描述
不能单纯地认为,只有从磁盘上导入到MySQL中的真实存在的才叫做表。
每个过程中产生的,和最终筛选出来的,都是表!!!

总结:

“MySQL下一切皆表。”


http://www.ppmy.cn/server/39521.html

相关文章

ExcelVBA取序号与合计之间的数据

今天有人提出这样一个问题&#xff0c; ExcelVBA取序号与合计之间的数据 数据如下: 分析一下&#xff0c;问题关键&#xff1a; 问题&#xff1a;1.我要在“序号”两字后面开始取数&#xff0c;因为序号是合并的&#xff0c;所以。。。2.我要取合计前面的数据&#xff0c;所以要…

SpringCloud生态体系介绍

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。 SpringC…

鸿蒙——即将是国内全部物联网的搭载系统

国内物联网时代 中国国内物联网时代是指在中国国内&#xff0c;物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;技术得到广泛应用和发展的时代。在这个时代&#xff0c;各种设备和物品都可以通过互联网进行连接和交互&#xff0c;实现信息的采集、传输和…

Go语言流程控制(二)

switch语句 Go 语言中的 switch 语句是一种选择结构&#xff0c;用于基于不同条件执行不同的代码块。Go 的 switch 相较于其他语言的 switch 有一些独特的特点&#xff0c;使其更为灵活和强大。下面是Go语言中 switch 语句的详细介绍&#xff1a; 基本语法 switch expressio…

notepad++安装 hex-editor插件

打开notepad 点击插件 搜索 hex-editor,点击右侧 安装install 安装成功后&#xff0c;在已安装插件中就有显示了

CAPL如何实现TLS握手认证

CAPL有专门的章节介绍如何实现TLS握手认证的函数: CAPL调用哪些函数实现TLS握手认证,需要了解TLS在整个通信过程的哪个阶段。 首先TCP需要建立连接,这是TLS握手的前提。当TLS握手认证完成后,可以传输数据。 所以TLS握手开始前需要确保TCP建立连接,TCP传输数据前需要确保…

【LLama】Llama3 的本地部署与lora微调(基于xturn)

系列课程代码文档&#xff08;前2节课可跳过&#xff09;&#xff1a;https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频&#xff1a;https://space.bilibili.com/3546636263360696/channel/series XTuner &#xff1a;https://github.com/InternLM/xtuner/blob/main/R…

c++ 线程的激活和休眠

在C中&#xff0c;线程的激活和休眠通常是通过标准库中的<thread>头文件和相关功能来实现的。但需要注意的是&#xff0c;C标准库本身并没有直接提供“休眠”线程的函数&#xff0c;而是依赖于操作系统的功能来暂停线程的执行。 线程的激活 线程的激活是通过创建并启动…