【MySQL】基本查询(表的增删改查)-- 详解(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL】基本查询(表的增删改查)-- 详解(下)

【MySQL】基本查询(表的增删改查)-- 详解(上)https://developer.aliyun.com/article/1515517?spm=a2c6h.13148508.setting.20.11104f0e63xoTy

三、Update

update table_name set column=expr [, column = expr ...] [where ...] [order by ...] [limit ...]

对查询到的结果进行列值更新。


⚪练习
(1)练习一 —— 将孙悟空同学的数学成绩变更为 80
  • 数据更新


(2)练习二 —— 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
  • 一次更新多个列


(3)练习三 —— 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
  • 更新值为原值基础上变更

注意:别名可以在 order by 中使用


(4)练习四 —— 将所有同学的语文成绩更新为原来的 2 倍
  • 没有 where 子句,则更新全表。

注意 :更新全表的语句慎用


四、Delete

1、删除数据

delete from table_name [where ...] [order by ...] [limit ...];


⚪练习
a. 练习一 —— 删除孙悟空同学的考试成绩

b. 练习二 —— 删除整张表数据

注意 :删除整表操作要慎用。


2、截断表

truncate [table] table_name;


  • 截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作


  • 再插入一条数据,自增 id 再重新增长


delete 和 truncate 的区别:

  1. 都可以清空表中的数据。
  2. delete from 是传统的删除,不会对计数器进行清空或重新置位,而 truncate 清空表会重置 auto_increment 项。
  3. truncate 是直接将表中数据清空,它不走事务,而 delete from 以及之前学的 sql 最终在运行时都要以事务的方式被包装,然后再让 MySQL 去运行。

注意 :这个操作慎用。

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

五、插入查询结果

insert into table_name [(column [, column ...])] select ...;  


⚪练习
(1)练习一 —— 删除表中的的重复复记录,重复的数据只能有一份

错误思路:


  • 创建一张空表(no_duplicate_table,结构和 duplicate_table 一样


  • duplicate_table 的去重数据插入到 no_duplicate_table


  • 通过重命名表,实现原子的去重操作


为什么最后是通过 rename 方式进行的?

就是单纯的想等一切都就绪了,然后统一放入、更新、生效等。


六、聚合函数


⚪练习
(1)练习一 —— 统计班级共有多少同学
  • 使用 * 做统计,不受 NULL 影响
  • 使用表达式做统计


(2)练习二 —— 统计本次考试的数学成绩分数个数
  • count(math) 统计的是全部成绩

  • count(distinct math) 统计的是去重成绩数量

注意

distinct 要写在括号内,因为我们是要对 math 去重,而不是对 count() 的结果去重。

NULL 不会计入结果。


(3)练习三 —— 统计数学成绩总分

  • 不及格 < 60 的总分,没有结果,返回 NULL

  • 数学的平均成绩


(4)练习四 —— 统计平均总分


(5)练习五 —— 返回英语最高分


(6)练习六 —— 返回 > 70 分以上的数学最低分


七、group by 子句的使用

分组的目的:为了进行分组后,方便进行聚合统计

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

select column1, column2, .. from table group by column;


1、准备工作,创建一个雇员信息表(来自 Oracle 9i 的经典测试表)

  • emp 员工表


  • dept 部门表


  • salgrade 工资等级表


2、如何显示每个部门平均工资最高工资

指定列名,实际分组是用该列不同的行数来进行分组的。

分组的 deptno,组内一定是相同的。说明可以被聚合压缩。

分组就是把一组按照条件拆分成了多个组,进行各自组内的统计。

分组(“分表”),就是把一张表按照条件在逻辑上拆成了多个子表,然后分别对各自的子表进行聚合统计。


3、显示每个部门每种岗位平均工资最低工资


4、显示平均工资低于 2000 的部门和它的平均工资

(1)统计出每一个部门的平均工资(结果先聚合出来)


(2)having group by 配合使用,对 group by 结果进行过滤(对聚合的结果进行判断)

having 和 group by 的语义是一样的,having 相当于是对分组聚合统计后的数据,进行条件筛选。

having 经常和 group by 搭配使用,作用是对分组进行筛选,作用有些像 where

having VS where 的区别与执行顺序是什么?

都能够做条件筛选,这是它们的共性。

但它们是完全不同的条件筛选,它们的条件筛选的阶段是不同的。

补充:不要单纯的认为,只有在磁盘上将表结构导入到 MySQL,真实存在的表才叫表。

中间筛选出来的,包括最终结果,全都是逻辑上的表。(MySQL 一切皆表)

只要我们能够处理好单表的 CURD,所有的 sql 场景就都能用统一的方式进行。


5、补充

SQL 查询中各个关键字的执行先后顺序:

from > on > join > where > group by > with > having > select > distinct > order by > limit


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
17天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
46 9
|
19天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
45 3
|
24天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
23天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
114 1
|
25天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
44 1
|
24天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
53 0
|
14天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
|
16天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
64 3
Mysql(4)—数据库索引
下一篇
无影云桌面