MySQL之基本查询(下)-表的增删查改

news2024/11/15 12:35:13

表的增删查改:CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

Update(更新)

语法:

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

列值更新

案例 

更新值为具体值

原先的值

将孙悟空同学的数学成绩变更为 80 分

mysql> update exam_result set math=80;//这个语句是将所有人的数学成绩变为80

mysql> update exam_result set math=80 where name='孙悟空';//进行where条件筛选

 一次更新多个列

 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

mysql> update exam_result set math=60 ,chinese=70  where name='曹孟德';

 更新值为原值基础上变更

 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

数据更新,不支持 math += 30 这种语法

原本排名

update exam_result set math=math+30 order by chinese+math+english limit 3;

执行后变化了

 将所有同学的语文成绩更新为原来的 2 倍

注意:更新全表的语句慎用!没有 WHERE 子句,则更新全表

mysql> update exam_result set chinese=chinese*2;

set左侧是列名右侧是表达式或者常数 ;

 Delete(删除)

删除数据

语法:DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

 删除孙悟空同学的考试成绩

查看原数据:mysql> select * from  exam_result where name='孙悟空';


删除数据:mysql> delete from exam_result where name='孙悟空';

查看删除结果:mysql> select * from  exam_result where name='孙悟空';

 删除总分最低的人

查看原数据最低的人:mysql> select name,chinese+math+english total from  exam_result order by total limit 1;

删除操作:mysql> delete from  exam_result order by chinese+math+english limit 1;
查看删除操作:宋公明不存在了

 删除整张表数据

注意:删除整表操作要慎用!在MySQL中分为表和表里面的数据;

delete语句重点是删除表里的数据;表结构不受影响

delete删除表数据

准备测试表:mysql> CREATE TABLE for_delete ( 
    ->  id INT PRIMARY KEY AUTO_INCREMENT, 
    ->  name VARCHAR(20) 
    -> );

插入测试数据:mysql> INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C'); 


查看测试数据:mysql> SELECT * FROM for_delete;


查看表结构:mysql> show create table for_delete\G

可以看到有auto_increment(可以理解为计数器),有专门的维护他

删除整表数据:DELETE FROM for_delete;


查看表结构:发现还是计数器值还是从4开始,并不会因为清除数据我的auto_increment清零
再插入一条数据:INSERT INTO for_delete (name) VALUES ('D');


查看数据发现自增 id 在原值上增长:

截断表 

语法:TRUNCATE [TABLE] table_name

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

测试表:mysql> CREATE TABLE for_truncate ( 
    ->  id INT PRIMARY KEY AUTO_INCREMENT, 
    ->  name VARCHAR(20) 
    -> ); 
插入测试数据:mysql> INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C'); 
查看测试数据:mysql> SELECT * FROM for_truncate;


查看表结构:mysql> show create table for_truncate\G

计数器的值是在4开始

截断整表数据:mysql> truncate for_truncate;

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

查看删除结果:mysql> SELECT * FROM for_truncate;
表还在:只是数据没了
再次查看表结构:mysql> show create table for_truncate\G

发现计数器值清空了

再插入一条数据:mysql> INSERT INTO for_truncate (name) VALUES ('D');
再次查看表结构:发现id在重新增长
查看数据:mysql> SELECT * FROM for_truncate;

 插入查询结果

语法:INSERT INTO table_name [(column [, column ...])] SELECT ...

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

 创建原数据表:CREATE TABLE duplicate_table (id int, name varchar(20));

插入测试数据:INSERT INTO duplicate_table VALUES (100, 'aaa'), (100, 'aaa'), (200, 'bbb'), (200, 'bbb'), (200, 'bbb'), (300, 'ccc');


去重:mysql> select distinct * from duplicate_table;
这步操作只是显示出去重后的数据,对原始表的数据没有影响

 思路:

创建一个结构一样的空表,然后将原来的表的去重数据放到新表里,再重命名两个表;

创新表:mysql> create table no_duplicate_table like duplicate_table;

你也可以重新create结构;不过用like方便因为是结构相似的表;新表插入数据mysql> insert into no_duplicate_table select distinct * from duplicate_table;


重命名mysql> rename table duplicate_table to old_duplicate_table,no_duplicate_table to duplicate_table;
/var/lib/mysql 是 Linux 系统中 MySQL 数据库默认的数据存储目录。可以到配置文件cd /var/lib/mysql中找到文件,在cd你所用的数据库可以看到你所建的表;

在MySQL中你建立一个数据库就是相当于建立一个文件夹,创一个表就是创立一个文件;

 最后rename防止其他文件关联使用,如果最开始rename可能其他文件无法使用了因为没有原来的了。

聚合函数

MySQL中也有自己的函数

count:

统计班级共有多少同学:mysql> select count(*) from exam_result;

使用 * 做统计,不受 NULL 影响
支持重命名mysql> select count(*) 总数 from exam_result;

使用count(1),count(2)结果一样的;因为你的表有多少行我就显示多少行,类似于select 1 from exam_result;你有5行那我就显示5行的1;那count(1)就是几行
统计本次考试的数学成绩分数个数:mysql> select count(math) 总数 from exam_result;

对成绩做去重distinct放count前没有用,因为我count已经聚合了是一个整数,再怎么去重我还是整数不变

错误:mysql> select distinct count(math) 总数 from exam_result;


正确:mysql> select  count(distinct math) 总数 from exam_result;

 sum: 

统计数学成绩总分:mysql> select  sum( math) 总数 from exam_result;

 AVG:

统计平均总分: mysql> select  avg( math+chinese+english) 总数 from exam_result;
返回数学平均分:mysql> select  avg( math) 总数 from exam_result;

也可以这样:mysql> select  sum( math)/count(1) 总数 from exam_result;

 返回数学成绩不及格的人数:mysql> select count(1) from exam_result where math<60;


英语不及格的人的总分:mysql> select sum(english) from exam_result where english<60;

所有不及格的人总分为101

max

返回英语最高分:mysql> select max(english) from exam_result;

错误:mysql> select name,max(english) from exam_result;不允许这样操作

 min

返回>70分以上的数学最低分:mysql> select min(math) from exam_result where math>70;

 group by子句的使用

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

语法:select column1, column2, .. from table group by column;

分组的目的是进行分组后,方便进行聚合统计 

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

将表上传到linux中

 将表导入到我们的数据库里:mysql> source /home/wwz/scott_data.sql;

可以看到成功导入并且数据库中有了scoot库;

 使用当前数据库:mysql> use scott;
查表:mysql> show tables;成功导入表

emp员工表 dept部门表 salgrade工资等级表



显示员工平均工资和最高工资:mysql> select avg(sal),max(sal) from emp;


按照部门显示平均工资和最高工资:mysql> select avg(sal),max(sal) from emp group by deptno;
显示每个部门的平均工资和最高工资:mysql> select deptno,avg(sal),max(sal) from emp group by deptno;
分组是指定列名(group by table_name)表示分组列是它,实际分组是使用这一列不同行的数据进行聚合统计分组(把这一列的一组分为多个组,进行组内统计)

显示每个部门的每种岗位的平均工资和最低工资:mysql>  select avg(sal),min(sal),job, deptno from emp group by deptno, job;//用逗号来隔离不同分组条件

先按照部门分组再按照工作分组(将表分为部门组表,再将每个部门组表分为工作表,最后聚合统计;相当于一个树向下分支再分支)

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

1. 统计各个部门的平均工资

mysql> select avg(sal) from emp group by deptno;

2. 对group by结果进行过滤

mysql> select avg(sal),deptno from emp group by deptno having avg(sal)<2000;

having的作用是你分完组了也聚合完了我再根据聚合统计的结果刷选;

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

先执行select avg(sal),deptno from emp group by deptno后执行having avg(sal)<2000;

 mysql>  select max(mgr),avg(sal),min(sal),job, deptno from emp where ename!='SMITH' group by deptno, job having avg(sal)<2000;
where是对具体的任意列进行条件筛选;

having是对我们分组聚合之后的结果进行条件刷选;

他们俩的应用场景是不同的,如果他俩在一块,先where后having;

执行顺序:1.告诉我你从那个表里拿数据from emp 2.告诉我拿数据的筛选条件是什么 where ename!='SMITH' 3. 按照对应的组进行分组 group by deptno, job 4. 按照分组后的进行聚合统计以及重命名 5. 进行结果having筛选

注意的是from左边的列必须在from右边分组出现,否则不成功

比如:mysql>  select ename,avg(sal),min(sal),job, deptno from emp group by deptno, job;//ename不属于分组条件所以无法分组

错误:ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'scott.emp.ename' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

错误:select mgr,avg(sal),min(sal),job, deptno from emp group by deptno, job;

正确:select max(mgr),avg(sal),min(sal),job, deptno from emp group by deptno, job;
所以只有在分组条件中出现的列才能在select后面,或者直接聚合函数也行

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

中间筛选出来的包括最终结果,可以理解为逻辑上的表!--"MySQL中一切皆表 ";

只要能对单表处理好CURD,那么所有的sql场景,都能用统一的方式进行;

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【观成科技】Websocket协议代理隧道加密流量分析与检测

Websocket协议代理隧道加密流量简介 攻防场景下&#xff0c;Websocket协议常被用于代理隧道的搭建&#xff0c;攻击者企图通过Websocket协议来绕过网络限制&#xff0c;搭建一个低延迟、双向实时数据传输的隧道。当前&#xff0c;主流的支持Websocket通信代理的工具有&#xf…

AnimateLCM:高效生成连贯真实的视频

视频扩散模型因其能够生成连贯且高保真的视频而日益受到关注。然而&#xff0c;迭代去噪过程使得这类模型计算密集且耗时&#xff0c;限制了其应用范围。香港中文大学 MMLab、Avolution AI、上海人工智能实验室和商汤科技公司的研究团队提出了AnimateLCM&#xff0c;这是一种允…

盲盒抽卡机小程序:抽卡机的多样化发展

近几年&#xff0c;盲盒卡牌出现在了大众的生活中&#xff0c;深受学生和年轻消费者的喜爱。卡牌是一种新的盲盒模式&#xff0c;玩家购买后随机获得卡牌&#xff0c;为了收集一整套卡牌&#xff0c;玩家会进行各种复购行为&#xff0c;卡牌逐渐成为了年轻人追捧的休闲方式&…

获取天气数据

获取天气数据其实是一个简单的HTTP接口&#xff0c;根据用户输入的adcode&#xff0c;查询目标区域当前/未来的天气数据&#xff0c;数据来源是中国气象局。 第一步&#xff0c;申请”web服务 API”密钥&#xff08;Key&#xff09;&#xff1b; 链接: 首页 | 高德控制台 (am…

HTTP协议分析/burp/goby/xray

一、HTTP简介 HTTP(超文本传输协议)是今天所有web应用程序使用的通信协议。最初&#xff0c;HTTP只是一个为获取基于文本的静态资源而开发的简单协议&#xff0c;后来人们以名种形式扩展和利用它.使其能够支持如今常见的复杂分布式应用程序。HTTP使用一种用于消息的模型:客户端…

软件产品必须进行确认测试吗?包括哪些测试流程和注意事项?

在当前科技快速发展的时代&#xff0c;软件产品已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;随着软件产品的增多和复杂性的提升&#xff0c;软件质量的问题也逐渐浮现出来。为了确保软件产品的质量和稳定性&#xff0c;软件产品在开发完成后必须进行确认测试。…

模版初阶(更新)

文章目录 模版介绍函数模版模版匹配规则类模版结言 模版介绍 函数模版分为两个类型&#xff1a; 函数模版类模版 函数模版 语法格式&#xff1a; t e m p l a t e < t y p n a m e T 1 , t y p n a m e T 2... > template<typname T1,typname T2...> template&…

小技巧(更新中)

1.Pycharm使用小技巧pycharm的使用小技巧1---快速找到模块内的函数和类&#xff0c;快速定位查看的模块所在位置_pycharm怎么查找某个函数-CSDN博客 2. Python库之requirments Python库安装之requirements.txt, environment.yml_python requirements-CSDN博客 3.执行.sh脚本的…

N6 word2vec文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊# 前言 前言 上周学习了训练word2vec模型&#xff0c;这周进行相关实战 1. 导入所需库和设备配置 import torch import torch.nn as nn import torchvision …

10x Visium HD数据分析

–https://satijalab.org/seurat/articles/visiumhd_analysis_vignette 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 1.数据准备-Seurat Visium HD 数据是由特定空间排列分布的寡核苷酸序列在 2um x 2um 的网格&#xff08;bin&#xff09;中生成的。然…

15. Revit API: Transaction(事务)与 Failures(故障处理)

前言 UI讲完&#xff0c;回到DB这块儿。在Document那篇&#xff0c;提到增删改查操作都是在Document上&#xff0c;是对Documet进行操作。 看到“增删改查”这四个&#xff0c;想到什么了没有&#xff1f; 数据库&#xff08;DB&#xff09;嘛~话说那本经典的红皮数据库的书叫…

Python学习笔记34:进阶篇(二十三)pygame的使用之颜色与字体

前言 基础模块的知识通过这么长时间的学习已经有所了解&#xff0c;更加深入的话需要通过完成各种项目&#xff0c;在这个过程中逐渐学习&#xff0c;成长。 我们的下一步目标是完成python crash course中的外星人入侵项目&#xff0c;这是一个2D游戏项目。在这之前&#xff…

算法训练营day28--134. 加油站 +135. 分发糖果+860.柠檬水找零+406.根据身高重建队列

一、 134. 加油站 题目链接&#xff1a;https://leetcode.cn/problems/gas-station/ 文章讲解&#xff1a;https://programmercarl.com/0134.%E5%8A%A0%E6%B2%B9%E7%AB%99.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1jA411r7WX 1.1 初见思路 得模拟分析出…

【Python实战因果推断】19_线性回归的不合理效果9

目录 De-Meaning and Fixed Effects Omitted Variable Bias: Confounding Through the Lens of Regression De-Meaning and Fixed Effects 您刚刚看到了如何在模型中加入虚拟变量来解释不同组间的不同干预分配。但是&#xff0c;FWL 定理真正的亮点在于虚拟变量。如果您有大量…

鸿蒙架构之AOP

零、主要内容 AOP 简介ArkTs AOP 实现原理 JS 原型链AOP实现原理 AOP的应用场景 统计类&#xff1a; 方法调用次数统计、方法时长统计防御式编程&#xff1a;参数校验代理模式实现 AOP的注意事项 一、AOP简介 对于Android、Java Web 开发者来说&#xff0c; AOP编程思想并不…

【前端】包管理器:npm、Yarn 和 pnpm 的全面比较

前端开发中的包管理器&#xff1a;npm、Yarn 和 pnpm 的全面比较 在现代前端开发中&#xff0c;包管理器是开发者必不可少的工具。它们不仅能帮我们管理项目的依赖&#xff0c;还能极大地提高开发效率。本文将详细介绍三种主流的前端包管理器&#xff1a;npm、Yarn 和 pnpm&am…

错位情缘悬疑升级

✨&#x1f525;【错位情缘&#xff0c;悬疑升级&#xff01;关芝芝与黄牡丹的惊世婚约】&#x1f525;✨在这个迷雾重重的剧场&#xff0c;一场前所未有的错位大戏正悄然上演&#xff01;&#x1f440; 你没看错&#xff0c;昔日兄弟的前女友关芝芝&#xff0c;竟摇身一变成了…

axios使用sm2加密数据后请求参数多了双引号解决方法

axios使用sm2加密数据后请求参数多了双引号解决 背景问题描述解决过程 背景 因项目安全要求&#xff0c;需对传给后端的入参加密&#xff0c;将请求参数加密后再传给后端 前期将axios降低到1.6.7后解决了问题&#xff0c;但最近axios有漏洞&#xff0c;安全要求对版本升级&…

通过电压差判定无源晶振是否起振正确吗?

在电子工程中&#xff0c;无源晶振作为许多数字电路的基础组件&#xff0c;其是否成功起振对于系统的正常运行至关重要。然而&#xff0c;通过简单检测晶振两端的电压差来判断晶振是否工作&#xff0c;这一方法存在一定的误区&#xff0c;晶发电子将深入探讨这一话题&#xff0…

【AIGC】一、本地docker启动私有大模型

本地docker启动私有大模型 一、最终效果中英文对话生成代码 二、资源配置三、搭建步骤启动docker容器登录页面首次登录请注册登录后的效果 配置模型尝试使用选择模型选项下载模型选择适合的模型开始下载 试用效果返回首页选择模型中英文对话生成代码 四、附录资源监控 五、参考…