数据库拓展操作

目录

一、截断表:

操作目的:

操作内容:

性能影响:

基本语法:

例子:

二、插入查询结果:

基本语法:

例子:

三、聚合函数:

常用函数:

基本语法:

例子:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境

前言 只因为在mac上没有找到合适的PHP开发集成环境&#xff0c;之前有安装了Eserver&#xff0c;但是安装一些常用PHP扩展有时候还是需要手动去编译添加。phpStudy也没有找到适合Mac的版本&#xff0c;在后面安装了Parallels Desktop虚拟机 来运行Ubuntu系统搭建了一套LNMP环境…

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的&#xff1a; 1.引入 required 模块&#xff1a;我们可以使用 requi…

Excel基础(详细篇):总结易忽视的知识点,有用的细节操作

目录 基础篇Excel主要功能必会快捷键LotusExcel的文件类型工作表基本操作表项操作选中与缩放边框线 自动添加边框线格式刷设置斜线表头双/多斜线表头不变形的:双/多斜线表头插入多行、多列单元格/行列的移动冻结窗口 方便查看数据打印的常见问题Excel格式数字格式日期格式文本…

vue3:四嵌套路由的实现

一、前言 1、嵌套路由的含义 嵌套路由的核心思想是&#xff1a;在某个路由的组件内部&#xff0c;可以定义子路由&#xff0c;这些子路由会渲染在父路由组件的特定位置&#xff08;通常是 <router-view> 标签所在的位置&#xff09;。通过嵌套路由&#xff0c;你可以实…

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…

【Python 数据结构 2.时间复杂度和空间复杂度】

Life is a journey —— 25.2.28 一、引例&#xff1a;穷举法 1.单层循环 所谓穷举法&#xff0c;就是我们通常所说的枚举&#xff0c;就是把所有情况都遍历了的意思。 例&#xff1a;给定n&#xff08;n ≤ 1000&#xff09;个元素ai&#xff0c;求其中奇数有多少个 判断一…

计算机毕业设计SpringBoot+Vue.js社区智慧养老监护管理平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

西北工业大学计算机复试上机真题

西北工业大学计算机复试上机真题 历年西北工业大学计算机复试上机真题 西北工业大学计算机考研复试上机真题 2023西北工业大学计算机复试上机真题 2022西北工业大学计算机复试上机真题 在线评测地址&#xff1a;传送门 数组排序 题目描述 一组整数&#xff0c;由小到大排序…

kafka-web管理工具cmak

一. 背景&#xff1a; 日常运维工作中&#xff0c;采用cli的方式进行kafka集群的管理&#xff0c;还是比较繁琐的(指令复杂&#xff1f;)。为方便管理&#xff0c;可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak&#xff1a; cmak是 Yahoo 贡献的一款强大的 Apac…

数据结构(初阶)(七)----树和二叉树(堆,堆排序)

八&#xff0c;树与二叉树 树 概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀…

数据集笔记:新加坡 地铁(MRT)和轻轨(LRT)票价

数据连接 data.gov.sg 2024 年 12 月 28 日起生效的新加坡地铁票价 该数据集包含 MRT 和 LRT 票价的信息&#xff0c;包括&#xff1a; 票价类型&#xff08;Fare Type&#xff09;&#xff1a;成人票、学生票、老年人票、残障人士票等。适用时间&#xff08;Applicable Tim…

常用的AI文本大语言模型汇总

AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…

GPIO概念

GPIO通用输入输出口 在芯片内部存在多个GPIO&#xff0c;每个GPIO用于管理多个芯片进行输入&#xff0c;输出工作 引脚电平 0v ~3.3v&#xff0c;部分引脚可容任5v 输出模式下可控制端口输出高低电平&#xff0c;可以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议&a…

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet&#xff1a;解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私&#xff0c;还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2&#xff08;24GB 内存&#xff09;上部署 DeepS…

530 Login fail. A secure connection is requiered(such as ssl)-java发送QQ邮箱(简单配置)

由于cs的csdN许多文章关于这方面的都是vip文章&#xff0c;而本文是免费的&#xff0c;希望广大网友觉得有帮助的可以多点赞和关注&#xff01; QQ邮箱授权码到这里去开启 授权码是16位的字母&#xff0c;填入下面的mail.setting里面的pass里面 # 邮件服务器的SMTP地址 host…

经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑

背景 对于一些内部使用的管理系统来说&#xff0c;可能没有引入Redis&#xff0c;又想基于现有的基础设施处理并发问题&#xff0c;而数据库是每个应用都避不开的基础设施之一&#xff0c;因此分享个我曾经维护过的一个系统中&#xff0c;使用数据库表来实现事务锁的方式。 之…

【 实战案例篇三】【某金融信息系统项目管理案例分析】

大家好,今天咱们来聊聊金融行业的信息系统项目管理。这个话题听起来可能有点专业,但别担心,我会尽量用大白话给大家讲清楚。金融行业的信息系统项目管理,说白了就是如何高效地管理那些复杂的IT项目,确保它们按时、按预算、按质量完成。咱们今天不仅会聊到一些理论,还会通…

爬虫系列之发送请求与响应《一》

一、请求组成 1.1 请求方式&#xff1a;GET和POST请求 GET:从服务器获取&#xff0c;请求参数直接附在URL之后&#xff0c;便于查看和分享&#xff0c;常用于获取数据和查询操作 POST&#xff1a;用于向服务器提交数据&#xff0c;其参数不会显示在URL中&#xff0c;而是包含在…

最新最详细的配置Node.js环境教程

配置Node.js环境 一、前言 &#xff08;一&#xff09;为什么要配置Node.js&#xff1f;&#xff08;二&#xff09;NPM生态是什么&#xff08;三&#xff09;Node和NPM的区别 二、如何配置Node.js环境 第一步、安装环境第二步、安装步骤第三步、验证安装第四步、修改全局模块…