数据库拓展操作

目录

一、截断表:

操作目的:

操作内容:

性能影响:

基本语法:

例子:

二、插入查询结果:

基本语法:

例子:

三、聚合函数:

常用函数:

基本语法:

例子:

1.统计exam表中有多少记录:

2.查询 > 70 分以上的数学最低分:

四、Group by 分组查询:

 基本语法:

例子:

 1.统计每个角色的人数:

2.统计每个角色的平均工资,最高工资,最低工资:

 3.显示平均工资低于1500的角色和它的平均工资:

 总结:

语法总结:


一、截断表:

截断表删除表是数据库中两种删除数据的操作,但是又有不同之处:

操作目的:

截断表

主要目的是快速清空表中的所有数据,但保留表的结构,包括表的定义、列名、数据类型、约束条件(如主键、外键、唯一约束等)以及索引等,以便后续可以继续向该表中插入新的数据。

删除表

是要将整个表从数据库中彻底移除,包括表的结构和表中的所有数据,删除后该表将不复存在,不能再对其进行任何数据操作。

操作内容:

截断表

仅删除表中的数据行,不会删除表的定义和相关的数据库对象。例如,在 MySQL 中使用 TRUNCATE TABLE table_name; 语句,只是把 table_name 表中的数据清空。

删除表

会删除表的所有信息,不仅包括数据,还包括表的元数据(如列定义、约束、索引等)。在 MySQL 里执行 DROP TABLE table_name; 后,table_name 表及其相关的一切都会被删除。

性能影响:

截断表

由于是直接释放数据页,不需要逐行删除数据,所以在处理大量数据时,截断表的性能通常比逐行删除(如使用 DELETE 语句)要好得多。

删除表

删除表的操作涉及到更多的元数据处理,需要更新数据库的系统目录来移除表的定义信息,因此在某些情况下可能会比截断表稍微慢一些,尤其是当表存在大量相关依赖对象时。

基本语法:

truncate table table_name;

table_name 是要截断的表的名称。

        如果表中有自增列(如 MySQL 中的 AUTO_INCREMENT 列),截断表会将自增列的值重置为初始值(通常为 1)。这在需要重新开始计数的场景中非常有用。

例子:

-- 创建测试表
create table t_truncate (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20)
);-- 插入测试数据
insert into t_truncate (name) values ('A'), ('B'), ('C');-- 查看测试表
select * from t_truncate;

-- 截断表
truncate table t_truncate;-- 查看表
select * from t_truncate;

-- 继续写入数据(只写了name,没有写id)
insert into t_truncate (name) values ('D');-- 查看表(自增主键从1开如计数)
select * from t_truncate;

如果是截断表,自增列被重置了,(如 上面的例子 id 重新从 1 开始计数)。

如果是删除表,表的自增列会随着表一起被删除。(这里不演示)。

二、插入查询结果:

        插入查询结果指的是将一个查询语句的结果插入到另一个表中。比如将一个表的部分数据复制到另一个表,或者合并多个表的数据等。

下面演示的例子是吧一张表的数据去重后给到另一张表。

基本语法:

insert into target_table
select column1, column2, ...
from source_table
[where condition];
  • target_table:要插入数据的目标表。
  • column1, column2, ...:从源表中选择的列,这些列会对应插入到目标表中。
  • source_table:查询数据的源表。
  • WHERE condition(可选):筛选源表数据的条件。

例子:

-- 创建测试表
create table t_recored (id int,name varchar(20)
);-- 构造测试数据
insert into t_recored VALUES
(100, 'aaa'),
(100, 'aaa'),
(200, 'bbb'),
(200, 'bbb'),
(200, 'bbb'),
(300, 'ccc');-- 查看结果
select * from t_recored;

-- 创建一张新表,新表的结构与t_recored相同
create table t_recored_new like t_recored;-- 查看新表的结构
select * from t_recored_new;

 可以看到,新表没有任何数据。

-- 把原表数据去重后,写入去重结果到新表里
insert into t_recored_new (id,name) select distinct id,name from t_recored;-- 查询新表中的记录,得到去重结果
select * from t_recored_new;

 这里,新表就得到了去重后的结果。

如果有需要,就把旧表的表名给到新表来后续维护。

-- 先把旧表名变成 t_recored_old 让出 t_recored 这个名字,再把旧表名给到新表名
rename table t_recored to t_recored_old,t_recored_new to t_recored;-- 查询结果
select * from t_recored;

三、聚合函数:

聚合函数是 SQL 中用于对一组值进行计算并返回单个值的函数,常用于统计和汇总数据。

常用函数:

函数说明
count(values)返回查询到的数据的数量
sum(values)返回查询到的数据的总和,不是数字没有意义
avg(values)返回查询到的数据的平均值,不是数字没有意义
max(values)返回查询到的数据的最大值,不是数字没有意义
min(values)返回查询到的数据的最小值,不是数字没有意义

count(*):统计所有记录的数量,无论该记录的列值是否为 null

count(列名):统计指定列中非 null 值的数量。

COUNTSUMAVGMAXMIN 这些常见的聚合函数,括号内一般只能写一个列名。

基本语法:

select aggregate_function(column_name)
from table_name
[where condition]
  • aggregate_function:聚合函数名,如 COUNTSUM 等。
  • column_name:要进行聚合操作的列名。
  • table_name:要查询数据的表名。
  • where condition(可选):筛选记录的条件。

例子:

1.统计exam表中有多少记录:

select count(*) from exam;

2.查询 > 70 分以上的数学最低分:

select min(math) from exam where math > 70;

四、Group by 分组查询:

 基本语法:

select column1, aggregate_function(column2)
from table_name
[where condition]
group by column1
[having group_condition];
  • column1:用于分组的列名,可以是一个或多个列,多个列名之间用逗号分隔。
  • aggregate_function(column2):对分组后的数据应用的聚合函数,column2 是要进行聚合操作的列。
  • table_name:要查询数据的表名。
  • where condition(可选):在分组之前筛选记录的条件。
  • group by column1:指定按照 column1 列进行分组。
  • having group_condition(可选):在分组之后对分组结果进行筛选的条件

        通常group by 和 having 配合使用的,就如上面所说,如果group by 分组后的结果还需筛选,就不能使用 where 筛选了,要使用 having

例子:

-- 建立测试表
create table emp (id bigint primary key auto_increment comment '编号',name varchar(20) not null comment '名字',role varchar(20) not null comment '角色',salary decimal(10, 2) not null comment '工资'
);-- 插入数据
insert into emp values (1, '马云', '老板', 1500000.00);
insert into emp values (2, '马化腾', '老板', 1800000.00);
insert into emp values (3, '小王', '员工', 10000.00);
insert into emp values (4, '小新', '员工', 12000.00);
insert into emp values (5, '刘孟德', '组长', 9000.00);
insert into emp values (6, '张三', '组长', 8000.00);
insert into emp values (7, '孙悟空', '游戏⻆⾊', 956.8);
insert into emp values (8, '猪悟能', '游戏⻆⾊', 700.5);
insert into emp values (9, '沙和尚', '游戏⻆⾊', 333.3);-- 查看测试表
select * from emp;

 1.统计每个角色的人数:

-- 第一种写法
select role, count(*) from emp group by role;-- 第二种写法
select role, count(role) from emp group by role;

 要注意的是:

select name,role, count(role) from emp group by role;

这样的写法会出错,因为对 role 进行 group by 分组时,会有不同的 name 对应着同一个 role 。

2.统计每个角色的平均工资,最高工资,最低工资:

select role,avg(salary),max(salary),min(salary) from emp group by role;

 3.显示平均工资低于1500的角色和它的平均工资:

select role,avg(salary) from emp group by role having avg(salary) < 1500;

 总结:

使用时,首先要知道对谁进行分组(group by),分组后要筛选什么条件的数据(having)。

语法总结:

select [DISTINCT(去重)] 列1, 列2, 聚合函数(...) 
from 表名 
[where 条件] 
[group by 分组列] 
[having 分组后条件] 
[order by 排序列 [ASC|DESC]] 
[limit 偏移量, 数量];

 执行顺序:where → group by → having → select → order by

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java分布式】Nacos注册中心

Nacos注册中心 SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心&#xff0c;相比 Eureka 功能更加丰富&#xff0c;在国内受欢迎程度较高。 官网&#xff1a;https://nacos.io/zh-cn/ 集群 Nacos就将同一机房内的实例划分为一个集群&#xff0c;一个服务可以包含多个集…

鸿蒙兼容Mapbox地图应用测试

鸿蒙Next已经发布一段时间了&#xff0c;很多之前的移动端地图应用&#xff0c;纷纷都要求适配鸿蒙Next。作为开发者都清楚&#xff0c;所谓的适配其实都是重新开发&#xff0c;鸿蒙的开发语言和纯前端的Javascript不同&#xff0c;也可以Android原始开发的语言不同。鸿蒙自带的…

老牌工具,16年依然抗打!

在电脑还没普及、操作系统为Windows XP/7的时代&#xff0c;多媒体文件的转换操作常常面临格式不兼容的问题。这时一款名为格式工厂的软件成为了众多用户的首选工具。格式工厂以其简洁易用的界面和强大的功能&#xff0c;轻松地进行各种文件格式的转换。成为很多修小伙伴的喜爱…

前缀和算法 算法4

算法题中帮助复习的知识 vector<int > dp( n ,k); n为数组大小 ,k为初始化 哈希表unordered_map<int ,int > hash; hash.find(k)返回值是迭代器 ,找到k返回其迭代器 没找到返回hash.end() hash.count(k)返回值是数字 ,找到k返回1 ,没找到返回0. C和java中 负数…

如何使用Spring Boot框架整合Redis:超详细案例教程

目录 # 为什么选择Spring Boot与Redis整合&#xff1f; 1. 更新 pom.xml 2. 配置application.yml 3. 创建 Redis 配置类 4. Redis 操作类 5. 创建控制器 6. 启动应用程序 7. 测试 # 为什么选择Spring Boot与Redis整合&#xff1f; 将Spring Boot与Redis整合可以充分利…

DeepSeek开源周,第五弹再次来袭,3FS

Fire-Flyer 文件系统&#xff08;3FS&#xff09;总结&#xff1a; 一、核心特点 3FS 是一个专为 AI 训练和推理工作负载设计的高性能分布式文件系统&#xff0c;利用现代 SSD 和 RDMA 网络&#xff0c;提供共享存储层&#xff0c;简化分布式应用开发。其主要特点包括&#xf…

爬虫系列之【数据解析之JSON】《三》

目录 前置知识 一、 json.loads()&#xff1a;JSON 转 Python 数据 二、json.dump()&#xff1a;python数据 转 json 并写入文件 三、json.loads() &#xff1a;json 转 python数据 四、json.load() &#xff1a;json 转 python数据&#xff08;在文件操作中更方便&#xf…

FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析

一、核心定位与历史沿革 Apache POI&#xff08;1990s-&#xff09; 作为Java生态中最古老的Excel处理库&#xff0c;提供对.xls/.xlsx文件的全功能支持。其核心价值在于对Excel规范的完整实现&#xff0c;包括单元格样式、公式计算、图表操作等深度功能。但存在内存消耗大&…

创建一个MCP服务器,并在Cline中使用,增强自定义功能。

MCP介绍 MCP 是一个开放协议&#xff0c;它标准化了应用程序如何向LLMs提供上下文。可以将 MCP 视为 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种标准化的方法来将您的设备连接到各种外围设备和配件一样&#xff0c;MCP 提供了一种标准化的方法来将 AI 模型连接到不同的…

【计算机网络入门】初学计算机网络(七)

目录 1. 滑动窗口机制 2. 停止等待协议&#xff08;S-W&#xff09; 2.1 滑动窗口机制 2.2 确认机制 2.3 重传机制 2.4 为什么要给帧编号 3. 后退N帧协议&#xff08;GBN&#xff09; 3.1 滑动窗口机制 3.2 确认机制 3.3 重传机制 4. 选择重传协议&#xff08;SR&a…

[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)

[Windows] 极限投屏_正式版 链接&#xff1a;https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future)&#xff1a; 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示&#xff0c;登录阿里云百炼人工智能业务控制台&#xff0c;创建智能体应用&#xff0c;智能体应用是一个agent&#xff0c;即提供个人或者企业的代理或中间件组件应用&#xff0c;对接阿里云大模型公共平台&#xff0c;为个人或者企业用户提供大模型应…

http报文的content-type参数和spring mvc传参问题

很早之前博主聊过HTTP的报文结构以及其中和传参相关的重要参数content-type还有spring mvc&#xff0c;以前的三篇文章&#xff1a; HTTP与HTTPS协议详解&#xff1a;基础与安全机制-CSDN博客 详解Http的Content-Type_content-type application-CSDN博客 如何在Spring Boot中…

如何在Python用Plot画出一个简单的机器人模型

如何在Python中使用 Plot 画出一个简单的模型 在下面的程序中&#xff0c;首先要知道机器人的DH参数&#xff0c;然后计算出每一个关节的位置&#xff0c;最后利用 plot 函数画出关节之间的连杆就可以了&#xff0c;最后利用 animation 库来实现一个动画效果。 import matplo…

JVM常用概念之垃圾回收设计与停顿

在我们应用程序运行期间&#xff0c;我们是需要尽可能避免垃圾回收。 图1&#xff1a;不同垃圾回收器的设计&#xff08;黄色代表STW&#xff0c;绿色代表并发&#xff09; 实验 计算机配置 Hardware Overview:Model Name: MacBook ProModel Identifier: MacBookPro14,2Pro…

大摩闭门会:250228 学习总结报告

如果图片分辨率不足&#xff0c;可右键图片在新标签打开图片或者下载末尾源文件进行查看 本文只是针对视频做相应学术记录&#xff0c;进行学习讨论使用

【Docker】使用Docker搭建-MySQL数据库服务

零、更换Docker镜像源 因为国内现在封锁了Docker默认拉取镜像的站点&#xff08;DockerHub&#xff09;&#xff0c;而且国内大部分Docker镜像站已全部下线&#xff0c;导致现在很多朋友在拉取镜像的时候会出现无法拉取的现象&#xff0c;这时候就需要进行更换Docker镜像源。 可…

商米科技前端工程师(base上海)内推

1.根据原型或高保真设计&#xff0c;开发web、H5、小程序等类型的前端应用&#xff1b; 2.在指导下&#xff0c;高质量完成功能模块的开发&#xff0c;并负责各功能模块接口设计工作&#xff1b; 3.负责产品及相关支撑系统的开发及维护工作&#xff0c;不断的优化升级&#x…

如何在docker中的mysql容器内执行命令与执行SQL文件

通过 docker ps -a 查询当前运行的容器&#xff0c;找到想执行命令的容器名称。 docker ps -a若想执行sql文件&#xff0c;则将sql文件放入当前文件夹下后将项目内的 SQL 文件拷贝到 mysql 容器内部的 root下。 sudo docker cp /root/enterprise.sql mysql:/root/然后进入 my…

【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录

小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset&#xff0c;用一个针插进去然后等待5s左右&#xff0c;松开&#xff0c;即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑&#xff0c;并将路由器WAN口连接至网口。确保电脑…