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

表的增删查改: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场景,都能用统一的方式进行;

 

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

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

相关文章

嘎嘎详细的三维变换详细讲解,包括视图变换、投影变换等,超级通俗易懂!

前置二维空间的各种变换笔记&#xff1a;二维变换 三维空间中的齐次坐标 从二维变换开始引申&#xff0c;可得到三维中的一个点的表达方式为 ( x , y , z , 1 ) ⊤ (\mathbf{x}, \mathbf{y}, \mathbf{z}, 1)^{\top} (x,y,z,1)⊤&#xff0c;也就是w1&#xff0c;而三维的向量…

WPF 制作一个文字漂浮提示框

WPF好像没有自带的文字提示漂浮&#xff0c;我们可以定制一个。 效果如下&#xff1a; xaml xaml如下&#xff1a; <Window x:Class"GroupServer.MsgTip"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sc…

【三维向量旋转】基于Matlab的三维坐标旋转

一、问题描述 若空间中存在三个点A,B,C&#xff0c;其中A点是不动点&#xff0c;B点是当前方向向量上的一个点&#xff0c;C是目标方向上的一个点。如果要让AB向量沿着BC方向进行旋转&#xff0c;使得AB最终旋转到AC。这个过程就是三维向量的旋转过程。我们关注的是这个过程&am…

【音频特征提取】傅里叶变换算法源码学习记录

目录 背景快速理解FFT&#xff08;快速傅里叶变换&#xff09;IFFT&#xff08;逆傅里叶变换&#xff09;STFT&#xff08;短时傅里叶变换&#xff09; 代码实现FFT源代码IFFT源代码FFT、IFFT自己实验STFT源代码STFT自己实验 总结 背景 最近用到了相关操作提取音频信号特征&am…

松下的台灯值得入手吗?书客|飞利浦护眼台灯真实测评PK

在追求高效阅读与舒适生活的今天&#xff0c;一盏好的台灯不仅是照明的工具&#xff0c;更是呵护双眼的伴侣。它不仅能够提供额外的光线&#xff0c;还能减少眼睛疲劳&#xff0c;提高我们的工作和学习效率。随着市场的不断发展&#xff0c;护眼台灯品牌款式愈发丰富。因此我们…

MYSQL 四、mysql进阶 8(索引优化与查询优化)

都有哪些维度可以进行数据库调优&#xff1f;简言之&#xff1a; 索引失效、没有充分利用到索引——建立索引关联查询太多JOIN&#xff08;设计缺陷或不得已的需求&#xff09;——SQL优化服务器调优及各个参数设置&#xff08;缓冲、线程数等&#xff09;——调整my.cnf数据过…

【C++】C++11(三)

我们在C11&#xff08;2&#xff09;中已经很好的解释了右值引用&#xff0c;这次来看看右值引用剩余的一些话题&#xff1a;可变参数包与emplace_back。 目录 可变参数模板&#xff1a;可变参数的sizeof&#xff1a;可变参数的展开&#xff1a;递归函数方式展开参数包&#x…

通过Arcgis从逐月平均气温数据中提取并计算年平均气温

通过Arcgis快速将逐月平均气温数据生成年平均气温数据。本次用2020年逐月平均气温数据操作说明。 一、准备工作 &#xff08;1&#xff09;准备Arcmap桌面软件&#xff1b; &#xff08;2&#xff09;准备2020年逐月平均气温数据&#xff08;NC格式&#xff09;、范围图层数据&…

k8s 部署RuoYi-Vue-Plus之server部署

1.先使用项目编排构建镜像, 修改prod使用的mysql, redis地址 获取运行的服务 kubectl get svc -n ruoyi对应连接修改 然后运行打包package命令, 生成jar包, 再打包为docker容器, 上传到所有节点上, 也可以上传到个人私有仓库 2.部署server-deploy.yaml 镜像名自行修改, apiV…

你知道的和你不知道的DOM操作技巧

你知道的和你不知道的DOM操作技巧 亲爱的前端小伙伴们&#xff0c;今天我们来聊聊那些你可能知道或者不知道的DOM操作技巧。作为一名前端开发者&#xff0c;如果你还在为DOM操作头疼&#xff0c;那么这篇文章绝对能让你茅塞顿开。让我们一起来探索一下DOM的奥秘吧&#xff01;…

【开源合规】开源许可证风险场景详细解读

文章目录 前言关于BlackDuck许可证风险对比图弱互惠型许可证举个例子具体示例LGPL系列LGPL-2.0-onlyLGPL-2.0-or-laterLGPL-2.1-onlyLGPL-2.1-or-laterLGPL-3.0-onlyLGPL-3.0-or-laterMPL系列MPL-1.0MPL-1.1MPL-2.0EPL系列EPL-1.0EPL-2.0互惠型许可证GPL系列GPL-1.0GPL-2.0GPL-…

Mac系统清理工具:您的数字生活杂务处理师

有没有觉得您的Mac有时候像是需要一个好的春季大扫除一样&#xff1f;随着我们不断使用电脑&#xff0c;各种不需要的文件、老旧的数据和忘记的安装包就像家里的灰尘一样慢慢积累。幸运的是&#xff0c;有了一些出色的Mac系统清理工具&#xff0c;我们可以轻松将这些数字灰尘拂…

Java中实现二维数组(矩阵)的转置

在矩阵运算中&#xff0c;矩阵的转置是一个基本操作&#xff0c;即将矩阵的行变成列&#xff0c;列变成行。在Java中&#xff0c;我们可以通过编写一个方法来实现二维数组的转置。下面&#xff0c;我将详细介绍如何在Java中完成这一任务&#xff0c;并提供完整的代码示例。 编…

【Linux】命令执行的判断依据:;,,||

在某些情况下&#xff0c;很多命令我想要一次输入去执行&#xff0c;而不想要分次执行时&#xff0c;该如何是好&#xff1f; 基本上有两个选择&#xff0c; 一个是通过shell脚本脚本去执行&#xff0c;一种则是通过下面的介绍来一次入多个命令。 1.cmd&#xff1a;cmd&#…

AR增强现实汽车装配仿真培训系统开发降低投入费用

随着互联网的无处不在&#xff0c;AR增强现实技术正逐步融入我们生活的每一个角落。深圳华锐视点作为一家引领行业潮流的AR内容开发的技术型公司&#xff0c;正以其卓越的技术实力和专业的服务团队&#xff0c;推动着国内AR技术向更加成熟和多元化的方向迈进。 深圳华锐视点提供…

成都晨持绪:抖音电商带货需要交钱吗

在抖音这个充满创意与可能的平台上&#xff0c;电商带货成为了一种新兴而又时尚的职业。然而&#xff0c;伴随着无数的点击与转发&#xff0c;有一个问题始终萦绕在人们心头——抖音电商带货需要交钱吗? 如画卷展开&#xff0c;抖音平台以其独特的算法和庞大的用户基础构建了一…

GDidees CMS v3.9.1 本地文件泄露漏洞(CVE-2023-27179)

前言 CVE-2023-27179 是一个影响 GDidees CMS v3.9.1 及更低版本的任意文件下载漏洞。这个漏洞存在于 /_admin/imgdownload.php 文件中&#xff0c;攻击者可以通过向 filename 参数传递恶意输入来下载服务器上的任意文件。 漏洞的根源在于对用户输入的 filename 参数处理不当…

前后端如何实现非对称加解密-使用RSA为例讲解!

写在最前面&#xff0c;RSA是一种非对称加密算法&#xff0c;使用不同的公钥和私钥进行加密和解密。 下面是使用RSA进行加密和解密的代码示例&#xff1a; 前端&#xff1a;使用CryptoJS进行RSA加密 在前端JavaScript中&#xff0c;使用jsencrypt库来进行RSA加密&#xff1a…

网络安全----防御----防火墙安全策略组网

防火墙组网 要求&#xff1a; 1&#xff0c;DMz区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问。 2&#xff0c;生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3&#xff0c;办公区设备10.0.…

【AI前沿】深度学习:技术、发展与前沿应用

文章目录 一、深度学习的背景与发展1.1 背景1.2 早期发展1.3 突破性进展1.4 近年发展 二、深度学习的基本概念2.1 神经网络2.2 多层感知器&#xff08;MLP&#xff09;2.3 卷积神经网络&#xff08;CNN&#xff09;2.4 循环神经网络&#xff08;RNN&#xff09;2.5 生成对抗网络…