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.mfbz.cn/a/379836.html

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

相关文章

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之StepperItem组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之StepperItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、StepperItem组件 用作Stepper组件的页面子组件。 子组件 无。 接口 St…

【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、FreeXL介绍二、文件下载三、文件分析四、pro文件五、编译实践一、FreeXL介绍 【FreeXL跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台…

openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU

文章目录 openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU216.1 CPU216.2 查看CPU状况216.3 性能参数分析 openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU 获取openGauss节点的CPU、内存、I/O和网络资源使用情况…

Unity3d Shader篇(六)— BlinnPhong高光反射着色器

文章目录 前言一、BlinnPhong高光反射着色器是什么&#xff1f;1. BlinnPhong高光反射着色器的工作原理2. BlinnPhong高光反射着色器的优缺点优点缺点 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三…

保护我方水晶,2024 数据库安全工具盘点

在数据价值堪比石油的数字时代&#xff0c;对每个组织而言&#xff0c;保护这一核心资产显得尤为重要。无论是来自外部的黑客攻击和恶意软件&#xff0c;还是源于内部的人为失误和内鬼行为&#xff0c;威胁无处不在。本文将介绍几款先进的数据库安全工具&#xff0c;从不同维度…

C++ 水仙花数

案例描述&#xff1a;水仙花数是指一个3位数&#xff0c;它的每个位上的数字的3次幂之和等于它本身例如&#xff1a; 1A35A33A3153 请利用do.…while语句&#xff0c;求出所有3位数中的水仙花数 分析思路&#xff1a; 1、将所有的三位数进行输出&#xff08;100~999&#x…

构造 蓝桥OJ小蓝的无限集

样例输入 4 1 4 7 2 5 8 3 6 8 12 11 81 样例输出 No Yes No No #include<bits/stdc.h> using namespace std;using ll long long;bool rnk(ll a, ll b, ll n) {if((n-1) % b 0) return true;else if (a 1) return false;ll res 1;while(res < n){res * a;if (r…

第三百一十回

我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍showMenu的用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容&#xff0c;它主要用来显示移动PopupMenu在页面中的位置…

L1-095 分寝室

一、题目 二、解题思路 遍历所有情况&#xff0c;i 为女生寝室数量&#xff0c;n-i 为男生寝室数量&#xff0c;循环的结束条件为不允许单人住一间寝室 所有待分配的学生都必须分到一间寝室&#xff1a;i<n0 && n-i<n1 && n-i>0 &#xff1b;对每种…

javaEE - 21( 15000字 Tomcat 和 HTTP 协议入门 -2)

一&#xff1a; HTTP 响应 1.1 认识 “状态码” (status code) 状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…)&#xff0c;以下为常见的状态码. 1.1.1 200 OK 这是一个最常见的状态码, 表示访问成功. 抓包抓到的大部分结果都是 200 HTTP/…

STM32控制JQ8400语音播报模块

时间记录&#xff1a;2024/2/7 一、JQ8400引脚介绍 标示说明ONE LINE一线操作引脚BUSY忙信号引脚&#xff0c;正在播放语音时输出高电平RX串口两线操作接收引脚TX串口两线操作发送引脚GND电源地引脚DC-5V电源引脚&#xff0c;3.3-5VDAC-RDAC输出右声道引脚DAC-LDAC输出左声道…

海外云手机——平台引流的重要媒介

随着互联网的飞速发展&#xff0c;跨境电商、短视频引流以及游戏行业等领域正经历着迅猛的更新换代。在这个信息爆炸的时代&#xff0c;流量成为至关重要的资源&#xff0c;而其中引流环节更是关乎业务成功的关键。海外云手机崭露头角&#xff0c;成为这一传播过程中的重要媒介…

数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)

数据库管理148期 2024-02-08 数据库管理-第148期 最强Oracle监控EMCC深入使用-05&#xff08;20240208&#xff09;1 性能主页2 ADDM Spotlight3 实时ADDM4 数据库的其他5 主机总结 数据库管理-第148期 最强Oracle监控EMCC深入使用-05&#xff08;20240208&#xff09; 作者&am…

Python爬虫http基本原理#2

Python爬虫逆向系列&#xff08;更新中&#xff09;&#xff1a;http://t.csdnimg.cn/5gvI3 HTTP 基本原理 在本节中&#xff0c;我们会详细了解 HTTP 的基本原理&#xff0c;了解在浏览器中敲入 URL 到获取网页内容之间发生了什么。了解了这些内容&#xff0c;有助于我们进一…

代码随想录算法训练营第四十六天(动态规划篇)|01背包(滚动数组方法)

01背包&#xff08;滚动数组方法&#xff09; 学习资料&#xff1a;代码随想录 (programmercarl.com) 题目链接&#xff08;和上次一样&#xff09;&#xff1a;题目页面 (kamacoder.com) 思路 使用一维滚动数组代替二维数组。二维数组的解法记录在&#xff1a;代码随想录算…

实例分割论文阅读之:FCN:《Fully Convolutional Networks for Semantica Segmentation》

论文地址:https://openaccess.thecvf.com/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf 代码链接&#xff1a;https://github.com/pytorch/vision 摘要 卷积网络是强大的视觉模型&#xff0c;可以产生特征层次结构。我们证明&#xff0c…

Python轴承故障诊断入门教学

目录 往期精彩内容&#xff1a; 1 工作室实验平台介绍 2 轴承故障诊断教程—数据集 3 轴承故障诊断教程—算法模型 3.1 振动分析方法 3.2 频域特征提取 3.3 时域特征提取 3.4 模型基础的机器学习方法 3.5 深度学习方法 3.6 时频域融合方法 3.7 信号重构方法 3.8 基…

4.0 Zookeeper Java 客户端搭建

本教程使用的 IDE 为 IntelliJ IDEA&#xff0c;创建一个 maven 工程&#xff0c;命名为 zookeeper-demo&#xff0c;并且引入如下依赖&#xff0c;可以自行在maven中央仓库选择合适的版本&#xff0c;介绍原生 API 和 Curator 两种方式。 IntelliJ IDEA 相关介绍&#xff1a;…

(基础算法)归并排序

1.确定分界点 mid &#xff08;lr&#xff09;/2 2.递归排序左右两段 3.归并----合二为一 #include<iostream> using namespace std; //归并排序----分治 const int N10010; int n; int q[N],tmp[N];//需要一个额外数组void mergesort(int q[],int l,int r)//l左边界&a…

机器学习系列——(十五)随机森林回归

引言 在机器学习的众多算法中&#xff0c;随机森林以其出色的准确率、对高维数据的处理能力以及对训练数据集的异常值的鲁棒性而广受欢迎。它是一种集成学习方法&#xff0c;通过构建多个决策树来进行预测和分类。本文将重点介绍随机森林在回归问题中的应用&#xff0c;即随机…