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://www.rhkb.cn/news/254213.html

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

相关文章

第十六篇【传奇开心果系列】Python的OpenCV库技术点案例示例:图像质量评估

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例短博文系列博文目录前言一、图像质量评估方法和相关函数的介绍二、均方误差示例代码三、峰值信噪比示例代码四、结构相似性指数示例代码五、视频质量评估示例代码六、OpenCV均方根误差计算示例代码七、OpenC…

Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)

目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线&#xff08;添加约束文件&#xff09;、生成比特流文件、烧录等步骤&a…

05 06 Verilog基础语法与应用讲解

05. 1. 位操作 计数器实验升级&#xff0c;设计8个LED灯以每个0.5s的速率循环闪烁&#xff08;跑马灯&#xff09; 1.1 方法1&#xff1a;使用移位操作符<<来控制led灯的循环亮灭 设计代码 Verilog中&#xff0c;判断操作的时候不加位宽限定是可以的&#xff0c;比如i…

MySQL之体系结构

华子目录 MySQL简介MySQL的特性MySQL版本MySQL常见版本 数据库排名网站MySQL结构体系查看最大连接数查询缓存配置情况 一条SQL语句执行流程 MySQL简介 MySQL是一个小型关系数据库管理系统&#xff0c;开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年…

IntelliJ IDE 插件开发 | (六)内部模式的使用

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…

Oracle systemstate、gdb、dbx介绍

当数据库出现严重的性能问题或者hang了的时候&#xff0c; 可能最常用的办法就是重启数据库&#xff0c;简单有效解决问题&#xff1b;但是重启后如何追踪问题的根本原因成了难题&#xff0c;很多信息随着重启也消失不见了&#xff0c;让追查问题变的十分棘手&#xff0c;这时就…

Spring第二天

一、第三方资源配置管理 说明&#xff1a;以管理DataSource连接池对象为例讲解第三方资源配置管理 1 管理DataSource连接池对象 问题导入 配置数据库连接参数时&#xff0c;注入驱动类名是用driverClassName还是driver&#xff1f; 1.1 管理Druid连接池【重点】 数据库准备…

Android 识别车牌信息

打开我们心爱的Android Studio 导入需要的资源 gradle //开源车牌识别安卓SDK库implementation("com.github.HyperInspire:hyperlpr3-android-sdk:1.0.3")button.setOnClickListener(v -> {Log.d("Test", "");try (InputStream file getAs…

#Z0458. 树的中心2

题目 代码 #include <bits/stdc.h> using namespace std; struct ff {int z,len; }; vector<ff> vec[300001]; int n,u,v,w,dp[300001][2],ans 1e9; void dfs(int x,int fa) {for(int i 0;i < vec[x].size();i){ff son vec[x][i];if(son.z ! fa){dfs(son.z,…

搭建macOS开发环境-1:准备工作

请记住&#xff1a; 最重要的准备工作永远是&#xff1a;备份数据 !!! 通过图形界面检查 Mac 的 CPU 类型&#xff1a; 在搭载 Apple 芯片的 Mac 电脑上&#xff0c;“关于本机”会显示一个标有“芯片”的项目并跟有相应芯片的名称&#xff1a; 通过命令行检查Mac的CPU类型 …

ASP.NET Core 预防开放式重定向攻击

写在前面 为预防钓鱼网站的常用套路&#xff0c;在进行 Web 应用程序的开发时&#xff0c;原则上应该将所有由用户提交的数据视为不可信。如果应用程序中包含了基于 URL 内容重定向的功能&#xff0c;需要确保这种类型的重定向操作只能在应用本地完成&#xff0c;或者明确判断…

构造回文数组

目录 原题描述&#xff1a; 题目描述 时间&#xff1a;1s 空间&#xff1a;256M 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 样例1输入&#xff1a; 样例1输出&#xff1a; 样例2输入&#xff1a; 样例2输出&#xff1a; 约定&#xff1a; 作…

《幻兽帕鲁》攻略:0基础入门及游戏基础操作 幻兽帕鲁基础设施 幻兽帕鲁基础攻击力 Mac苹果电脑玩幻兽帕鲁 幻兽帕鲁加班加点

今天就跟大家聊聊《幻兽帕鲁》攻略&#xff1a;0基础入门及游戏基础操作。 如果想在苹果电脑玩《幻兽帕鲁》记得安装CrossOver哦。 以下纯干货&#xff1a; CrossOver正版安装包&#xff08;免费试用&#xff09;&#xff1a;https://souurl.cn/Y1gDao 一、基础操作 二、界面…

(45)执行操作后的变量值

文章目录 每日一言题目解题思路代码结语 每日一言 与其临渊羡鱼&#xff0c;不如退而结网。——《史记汉书董仲舒传》 题目 题目链接&#xff1a;执行操作后的变量值 存在一种仅支持 4 种操作和 1 个变量 X 的编程语言&#xff1a; X 和 X 使变量 X 的值 加 1 –X 和 X-- 使…

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动 在用Allegro进行PCB设计时,有时候需要同时移动某个区域的所有元素,如:Symbols,shapes,vias,Clines,Cline segs等元素。那么如何操作呢? 首先就是把Symbols,shapes,vias,Clines,Cline …

【机器学习笔记】机器学习基本概念

机器学习基本概念 文章目录 机器学习基本概念1 概述2 机器学习实验方法与原则2.1 平均指标 2.2 训练集、验证集与测试集2.3 随机重复实验2.4 K折交叉验证2.4 统计有效性检验 1 概述 什么是机器学习 —— 在某种任务上基于经验不断进步 T (Task)&#xff1a;需要解决什么任务 P(…

LLaMA 模型中的Transformer架构变化

目录 1. 前置层归一化&#xff08;Pre-normalization&#xff09; 2. RMSNorm 归一化函数 3. SwiGLU 激活函数 4. 旋转位置嵌入&#xff08;RoPE&#xff09; 5. 注意力机制优化 6. Group Query Attention 7. 模型规模和训练超参数 8. 分布式模型训练 前置归一化与后置…

改进神经网络

Improve NN 文章目录 Improve NNtrain/dev/test setBias/Variancebasic recipeRegularizationLogistic RegressionNeural networkother ways optimization problemNormalizing inputsvanishing/exploding gradientsweight initializegradient checkNumerical approximationgrad…

设计模式-行为型模式(下)

1.访问者模式 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式. 访问者模式(Visitor Pattern) 的原始定义是&#xff1a; 允许在运行时将一个或多个操作应用于一…

【华为云】云上两地三中心实践实操

写在前面 应用上云之后&#xff0c;如何进行数据可靠性以及业务连续性的保障是非常关键的&#xff0c;通过华为云云上两地三中心方案了解相关方案认证地址&#xff1a;https://connect.huaweicloud.com/courses/learn/course-v1:HuaweiXCBUCNXI057Self-paced/about当前内容为华…