MySQL学习记录——칠 表操作

文章目录

  • 1、了解
  • 2、创建和插入
    • 1、基本创建和插入
    • 2、插入并更新on duplicate
    • 3、插入并替换replace
  • 3、Retrieve
    • 1、查询select
    • 2、条件查询where
    • 3、结果排序order by
    • 4、限制行数limit
  • 4、更新Update
  • 5、删除delete
  • 6、去重
  • 7、聚合函数(5个)
    • 1、count
    • 2、sum
    • 3、avg
    • 4、max
    • 5、min
    • 6、分组聚合group by


1、了解

表有增删查改操作,有Create创建,Retrieve读取,Update更新,Delete删除,统称CRUD。

2、创建和插入

1、基本创建和插入

insert前面已经用过

insert (into) 表名 (各列名) values (列名对应的数据);

列名可以指定哪几个列名,如果是全部列名,可以都写上,也可以省略这部分,values后面的括号要按照前面列的顺序来写。

create

create table students (id int unsigned primary key auto_increment,sn int not null unique comment '学号',name varchar(20) not null,qq varchar(20)
);

全变成小写就是create的形式。每个类型后面跟的都是约束属性,这个在之前的博客中也写过。

insert into students (sn, name, qq) values (123, '哈哈', '4273684');
//全列插入
insert into students values (2, 1234, '哈哈哈', '4345273684');
insert into students values (5, 122345, '呵呵', '3453');
//插入多个, 可以指定列也可以全列
insert into students values (7, 123456,  '呵呵呵', '344353'), (10, 453, '嘿嘿', '78645');
insert into students (sn, name, qq) values (658,  'hfdjd', '7896'), (099, 'xcv', '8756');

在这里插入图片描述
在这里插入图片描述

2、插入并更新on duplicate

我们对上图的7号进行更改,当插入发生冲突时进行更新。

insert into students  values (7, 123456, '呵呵呵', '344353') on duplicate key update sn=86, name='ashjda', qq='07324';

0 row affected:表中有冲突数据,但冲突数据的值和 update 的值相等
1 row affected:表中没有冲突数据,数据被插入
2 row affected:表中有冲突数据,并且数据已经被更新

row_count()函数可以查看受影响的数据行数。

3、插入并替换replace

replace into students (指定的列名) values (对应的数据);

1 row affected:表中没有冲突数据,数据被插入
2 row affected:表中有冲突数据,删除后重新插入

3、Retrieve

1、查询select

create table exam_result (-> id int unsigned primary key auto_increment,-> name varchar(20) not null comment '同学姓名',-> chinese float default 0.0 comment '语文成绩',-> math float default 0.0 comment '数学成绩',-> english float default 0.0 comment '英语成绩'-> );

插入一些数据

INSERT INTO exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30);

查询用select,其中的命令选项*是指全部,也可以指定哪些列。

select 列名 from 表名;

列名可写多个,比如id,name,password这样的形式。select也可以计算一个表达式,计算可以单独拎出来,也可以和查询放到一起,比如

在这里插入图片描述

也能算这样的

在这里插入图片描述

计算部分的名字可以更改

select name, math, math+chinese-english as total from exam_result;
select name, math, math+chinese-english total from exam_result;
select name 姓名, math 数学, math+chinese-english 总分 from exam_result;

去重则是在列名前加上distinct。

2、条件查询where

可以用select来计算一下,继续用上面select那里创建的表。

在这里插入图片描述

上面的写为大写和小写都行,看这个数据库的校验集。

还有逻辑运算符

and:多个条件必须都为true(1),结果才是true(1)
or:任意一个条件为true,结果就是true
not:条件为true,结果为false

where实际用法

在这里插入图片描述

select name, chinese from exam_result where chinese>=80 and chinese <=90;
select name, chinese from exam_result where chinese between 80 and 90;
//下面两个一样, 但是第二个更简洁
select name, math from exam_result where math in (58, 59) or (98, 99);
select name, math from exam_result where math in (58, 59, 98, 99);

对于模糊的关键词,看上面运算符图中like关键字。

select name from exam_result where name like '孙_';//找到孙某
select name from exam_result where name like '孙%';//找到孙某和孙某某
select name, chinese, english from exam_result where chinese > english;//语文成绩大于英语成绩

找一下总分少于200的,因为当前表没有总分这一列,我们可以这样写

//不能这样写, 即使重命名了, 语句执行顺序是where先开始, 先达到筛选条件再执行select
select name, chinese+english+math total from exam_result where total < 200;
//正确写法
select name, chinese+english+math total from exam_result where chinese+english+math < 200;

还有一些例子

//语文大于80且不姓孙
select name, chinese from exam_result where chinese>80 and name not like '孙%';
//孙某同学, 否则总成绩大于200且语文小于数学且英语大于80
//条件可以用圆括号括起来
select name, chinese, math, english, chinese+math+english 总分 from exam_result where name like '孙_' or (chinese+math+english>200 and chinese < math and english < 80);

null和空串也可以查询,这俩不一样的概念。

3、结果排序order by

asc为升序,desc为降序,默认为asc。没有order by子句的查询,返回的顺序是未定义的,查询时通常用order by。

还是用上面的exam_result表。

//按数学成绩降序排序同学名和数学成绩
select name, math from exam_result order by math desc;

可以多列不同的排序方式,但其实有好几列的排序都会混乱。上面用where时前面临时改的名字不可以用来判断,但是order by可以,因为先执行前面的再执行order by。

4、限制行数limit

//limit从0开始
select * from 表名 limit 4;//前4行
select * from 表名 limit 4, 7;//第5行开始, 读取7行, 如果不够7行, 就读取剩下的全部
select * from 表名 limit 4 offset 2//从第3行开始读取4行

放在一起。limit可以放到偏后面。

select name, english+chinese+math total from exam_result where english+math+chinese>200 order by total
desc limit 2 offset 3;

4、更新Update

update会先查找到再更改。以上面的exam_result表为例,update后面可以跟条件选择。

//如果不加where就是默认把所有的都设置上
update exam_result set math=80 where name='孙悟空';
update exam_result set math=60, chinese=70 where name='曹孟德';
//将数学分数+30后选取倒数3位
update exam_result set math=math+30 order by chinese+math+english asc limit 3;

使用update时要谨慎用没用where,没用会更新全部,写时要记着where来更新选定的一部分。

5、删除delete

delete from 表名//不加任何条件也是全删

全删是删表中的数据,但不影响属性,比如show create 表名,里面还是一样,没变化。删总成绩倒数第一的

delete from exam_result order by chinese+math+english asc limit 1;

清空表除了delete,还有截断表做法

truncate table 表名

会重置auto_increment选型,且无法回滚。truncate不会把自己的操作记录进mysql的日志文件中,而是直接删除,所以速度更快一些,不过只能删整表。

6、去重

创建一个新表并插入一些数据

create table dt( id int, name varchar(20) );
insert into dt values
(100, 'aaa'),
(100, 'aaa'),
(200, 'bbb'),
(200, 'bbb'),
(200, 'bbb'),
(300, 'ccc');

接下来把去重后的数据放到一个新表中

//建立表结构和dt一样的空表ndt
create table ndt like dt;
//去重表示一下原表
select distinct * from dt;
//插入到新表
insert into ndt select distinct * from dt;
//重命名一下
rename table dt to old_dt;
rename table ndt to dt;

7、聚合函数(5个)

1、count

//看一个表有多少个记录
select count(*) from exam_result;
//上面的*写成1, 2, 3也行

写成select 1 from 表名,表里有多少行就打印多少行的1;同样的,select后写上某一列名,就会打印出这列所有的数据,select count(列名)就打印出这一列有多少个数据。

如果一列有重复的数据,不能这样写select distinct count(列名) …,因为要去重的是一列的数据,而不是count的结果,应该写count(distinct 列名)。

2、sum

select sum(列名) from 表名;
//均值
select sum(列名) / count(*) from 表名;
//针对上面的表exam_result, 计算英语不及格的几个人的均值
select sum(english) / count(english) from exam_result where english < 60;

3、avg

计算平均

select avg(列名) from 表名;

avg里面可以有a+b+c这样的表达式。

4、max

最大值

select max(列名) from 表名;

max前面不可以加另外的列名

5、min

最小值

select min(列名) from 表名;

6、分组聚合group by

分组是为了更方便地聚合。

引入一个表scott,emp员工表,dept部门表,salgrade工资等级表。

在这里插入图片描述
在这里插入图片描述

//显示每个部门的平均工资和最高工资
//下句如果select后不写deptno, 那就只显示最高和平均两列, 写上就会打印出对应的部分
select deptno, max(sal) 最高, avg(sal) 平均 from emp group by deptno;

在这里插入图片描述

分组是用选定列的不同的行的数据来进行分组,分组的条件,比如上面的deptno,会去重,也就是聚合压缩。分组是把一张表按照条件再逻辑上拆成了多个子表,然后分别对各自的子表进行聚合统计。

只有在group by之后出现的列名,前面才允许出现这些列名。

//显示每个部门的每种岗位的平均工资和最低工资
select deptno 部门, job 岗位, avg(sal) 平均, min(sal) 最低 from emp group by deptno, job;
//上句如果在select后再加上一个ename, 要查看对应的人名, 这时候就会出错, 因为人名无法按照后面分组条件来分组的//显示平均工资低于2000的部门和它的平均工资
//要结合having, 对聚合后的结果再做条件选择
select deptno, avg(sal) 平均 from emp group by deptno having 平均<2000;

在这里插入图片描述
在这里插入图片描述

如果写select * from 表名 having 条件,比如ename=‘…’,也会正常显示。where是对具体的任意列进行条件筛选,having是对分组聚合之后的结果进行条件筛选。

不仅仅是定义的表,筛选出来的结果也是表。对于MySQL来说,一切皆表。只要是能够处理好单表的操作,那么所有的sql场景都能用统一的方式进行。

结束。

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

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

相关文章

【蓝桥杯单片机记录】IO基础与LED控制

目录 一、IO基础 1.1 IAP15F2K61S2芯片原理图 1.2不同工作模式 二、新建工程的一些补充 2.1 keil中没有IAP15F2K61S2的头文件 解决&#xff1a;在isp软件中找到如下​编辑 2.2keil中的芯片选择 2.3推荐字体 三、sbit关键字 四、LED控制 4.1原理图 4.2不能直接通过IO…

Token、Tokenization 和张量之间的关系

输入经过Tokenization、Embedding和Positional Encoding后&#xff0c;最终构建为张量&#xff0c;给后续的计算和处理带来很多优势。 1. tokenization和张量 在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;tokenization 是文本预处理的重要步骤之一&#xff0…

【漏洞复现】SpringBlade export-user接口存在SQL注入漏洞

漏洞描述 SpringBlade 是一个由商业级项目升级优化而来的微服务架构 采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。SpringBlade export-user接口存在SQL注…

【踏雪无痕的痕一】——认知的心病

目录 一、背景介绍二、思路&方案三、过程1.教育是最大的"炸片"2.逻辑对等性的认知(时间的保证)3.不要去猜一个人怎么想&#xff0c;要看一个人怎么做4.改变一个人的基础5.你想过和你能过上什么生活完全取决于你自己 四、总结 一、背景介绍 大多数人都只愿意看到…

Blazor Wasm Google 登录

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

给大家拜年啦!最全科研资料,新年促销优惠!机器学习预测全家桶/故障诊断全家桶/改进算法/Python,Matlab代码...

最近后台有不少小伙伴问到&#xff0c;新年有没有什么优惠价&#xff0c;您这也不搞个活动吗&#xff01; 本期作者郑重推出几个比较受欢迎的全家桶&#xff01;一律7折优惠&#xff01;每个商品仅限5次购买机会&#xff0c;也就是说&#xff0c;满5个人后&#xff0c;该商品会…

Stable Diffusion 模型下载:GhostMix(幽灵混合)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型&#xff0c;也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下&#xff0c;提高模型的成…

使用Arcgis裁剪

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、掩膜提取二、随意裁剪三、裁剪 前言 因为从网站下载的是全球气候数据&#xff0c;而我们需要截取成中国部分&#xff0c;需要用到Arcgis的裁剪工具 一、掩…

零基础学Python(9)— 流程控制语句(下)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。流程控制语句是编程语言中用于控制程序执行流程的语句&#xff0c;本节课就带大家认识下Python语言中常见的流程控制语句&#xff01;~&#x1f308; 目录 &#x1f680;1.while循环 &#x1f680;2.for循环 &#x1…

嵌入式中SolidWorks2022 安装教程

软件介绍 SolidWorks是一款专业的三维3D设计软件&#xff0c;功能强悍&#xff0c;支持分布式数据管理&#xff0c;支持直接处理网格数据&#xff0c;提供更多的数据的灵活性&#xff0c;使用起来高效便捷。可以帮助用户轻松进行3D CAD设计、机械设计、钣金设计、模拟设计、电气…

[CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理

文章目录 前言一、所需环境二、实现思路2.1. 定义了LeNet网络模型结构&#xff0c;并训练了20次2.2 以txt格式导出训练结果(模型的各个层权重偏置等参数)2.3 (可选)以pth格式导出训练结果&#xff0c;以方便后期调试2.4 C CUDA要做的事 三、C CUDA具体实现3.1 新建.cu文件并填好…

Android SDK 上传 Maven 喂奶级教程

最近领导给安排了个任务&#xff0c;让我把我们现有的一个 SDK 上传到 Maven 上去&#xff0c;方便客户直接用 gradle 依赖&#xff0c;不再需要拷贝 jar 和 so 了&#xff0c;此前我也看过一些相关的文章我想问题也不大&#xff0c;觉得工作量也就一两天的事情&#xff0c;主要…

Peter算法小课堂—枚举优化

哈哈哈&#xff0c;新年快乐&#xff01;这一次Peter将要给大家讲一讲轻松、摆烂的算法—枚举&#xff01;咋就是说呀&#xff0c;枚举这个玩意我语法就会了。但大家想想&#xff0c;咱们CSP考试时&#xff08;除了没过初赛的&#xff09;只给1秒&#xff0c;大家想想&#xff…

STM32Cubmax AD采集

一、基本概念 二、项目 AD函数结构体 typedef struct { uint32_t Mode; // ADC 工作模式选择 FunctionalState ScanConvMode; /* ADC 扫描&#xff08;多通道&#xff09; 或者单次&#xff08;单通道&#xff09;模式选择 */ FunctionalState ContinuousConvMode; // ADC 单…

【深度学习】pytorch 与 PyG 安装(pip安装)

【深度学习】pytorch 与 PyG 安装&#xff08;pip安装&#xff09; 一、PyTorch安装和配置&#xff08;一&#xff09;、安装 CUDA&#xff08;二&#xff09;、安装torch、torchvision、torchaudio三个组件&#xff08;1&#xff09;下载镜像文件&#xff08;2&#xff09;创建…

2024腾讯云游戏服务器租用多少钱一年?

2024年更新腾讯云游戏联机服务器配置价格表&#xff0c;可用于搭建幻兽帕鲁、雾锁王国等游戏服务器&#xff0c;游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置&#xff0c;可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

TCP/IP协议以及UDP(超详细,看这一篇就够了)

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;TCP/IP协议以及UDP(超详细,看这一篇就够了) &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 TCP/IP协议以及UDP(超详细,看这一篇就够了 前提概括接收端和发送端客户…

5G NR 信道号计算

一、5G NR的频段 增加带宽是增加容量和传输速率最直接的方法&#xff0c;目前5G最大带宽将会达到400MHz&#xff0c;考虑到目前频率占用情况&#xff0c;5G将不得不使用高频进行通信。 3GPP协议定义了从Sub6G(FR1)到毫米波(FR2)的5G目标频谱。 其中FR1是5G的核心频段&#xff0…

ARP欺骗攻击利用之内网截取图片

Arp欺骗&#xff1a;目标ip的流量经过我的网卡&#xff0c;从网关出去。 Arp断网&#xff1a;目标ip的流量经过我的网卡 1. echo 1 >/proc/sys/net/ipv4/ip_forward 设置ip流量转发&#xff0c;不会出现断网现象 有时不能这样直接修改&#xff0c;还有另外一种方法 修…

【原理图PCB专题】Cadence17.4 PCB位号重排与反标

在文章:【原理图专题】Cadence 16.6如何把PCB元件位号重排并反标到原理图 中我们讲到了Cadence16.6版本对原理图进行反标的操作。 对于反标之前我们是通过如下所示的绘制流程来讲的,一般在首板或是大改板操作器件里有很多不同的很大的位号,这时我们可以通过Backannotate功能…