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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
存储 关系型数据库 MySQL
MySQL数据库的数据类型、语法和高级查询
MySQL数据库的数据类型、语法和高级查询
19 0
|
2天前
|
存储 缓存 监控
MySQL 8.0中查询缓存的废弃与原因分析
MySQL 8.0中查询缓存的废弃与原因分析
14 1
|
5天前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
10 3
|
6天前
|
SQL 关系型数据库 MySQL
MySQL周内训参照3、简单查询与多表联合复杂查询
MySQL周内训参照3、简单查询与多表联合复杂查询
12 1
|
1天前
|
监控 关系型数据库 MySQL
MySQL 查询数据库响应时长详解
- 启用慢查询日志(`slow_query_log`)分析超时查询,调整`long_query_time`阈值。 - 使用`EXPLAIN`检查查询执行计划,优化索引和查询结构。 - `SHOW PROFILE`揭示查询各阶段耗时,辅助性能调优。 - 开启Performance Schema监控服务器,通过`events_statements_summary_by_digest`等表分析性能。 - MySQL Workbench和Percona Toolkit等工具提供额外的性能分析和管理功能。 - 优化技巧:创建合适索引,精简查询,调整数据库配置以提升响应速度。
33 0
|
6天前
|
SQL 关系型数据库 MySQL
MySQL分组查询以及having筛选
MySQL分组查询以及having筛选
8 0
|
6天前
|
SQL 关系型数据库 MySQL
MySQL分组查询实例
MySQL分组查询实例
10 0
|
7天前
|
存储 SQL 关系型数据库
【MySQL技术内幕】4.1-索引组织表
【MySQL技术内幕】4.1-索引组织表
9 0
|
2天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第三篇(MySQL性能优化)
MySQL数据库进阶第三篇(MySQL性能优化)
|
2天前
|
SQL 关系型数据库 MySQL
关系型数据库mysql跨平台兼容性
【6月更文挑战第13天】
47 4