MySql表的增删查改(CRUD)

  • 对表中的数据操作分为4大类,增加数据,删除数据,查找数据,修改数据。
  • 对表中的数据进行增删查改操作简称为CRUD。Create(增),Retrieve(查找),Updata(修改),Delete(删除)
  • CRUD的操作是对表中的数据进行操作的,是SQL语句中的DML(Data Manipulation Language)数据操作语言。

Create操作

对表中新增数据,SQL语法为:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
  • table_name 是要插入数据的表的名称。
  • (column1, column2, column3, ...) 是要插入数据的列的列表。如果省略列名列表,则应提供值的完整列表,按照表中列的顺序插入值。
  • VALUES 关键字后面跟着括号内的值列表,这些值按照列的顺序与列名对应。

使用案例
首先创建一张表,表中包含id,name,age列。 id做为主键且自增。

image.png

  • 单行数据+全列插入
    单行数据的全列插入,可以省略列名列表,直接在 INSERT INTO 语句中指定 VALUES 语句。比如对上面进行全列插入
    insert into user values (2,'李四',18);

image.png

  • 多行数据+指定列插入
    当有多行数据时,values后面加逗号分隔符 并且在表名后面指定插入的列。 比如对上面的user表插入多行数据,指定name和age列。
    insert into user(name,age) values ('王五',19),('赵六',20),('田七',29);

image.png

  • 插入时更新
    插入时由于主键已经存在,插入相同的值会导致插入失败。可以选择进行同步更新操作。
    比如下表插入数据时,由于主键已经存在导致插入失败。

image.png
此时可以选择性的进行同步更新操作语法:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...) 
ON DUPLICATE KEY UPDATE 列名 = value [, column = value] ...

比如对上表id为1的更新为name为周八,age为19的。
insert into user values (1,'周八',17) on duplicate key update name='周八',age=19;
image.png

  • 替换
    当主键和唯一键没有冲突时就直接插入。
    如果主键和唯一键冲突,那么先删除在进行插入。

语法和insert一样,就是把insert换为replace。
比如上表替换周八为张三。
replace into user(id,name,age) values(1,'张三',19);

image.png

Retrieve操作

在表中查找数据,语法为

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • column1, column2, ... 是要检索的列名,可以是表中的任何列,也可以是表达式或聚合函数的结果。
  • table_name 是要从中检索数据的表的名称。
  • condition 是可选的 WHERE 子句,用于指定筛选条件,只有满足条件的行才会被检索。

使用案例

  1. 创建一个表用来模拟成绩表,表中包含学号,姓名,数学和计算机成绩列。

image.png
2. 向表中插入一批数据

image.png

  • select全列查询
    全列查询一般使用select * form 表名查询即可。
  • 指定列查询
    比如只查询id,name和math
    select id,name,math from exam_tb;
    image.png
  • 查询字段为表达式
    比如查询一下math和computer的成绩和
    select id,name,math+cpmputer from exam_tb;
    image.png
    也可以将查询结果指定别名 比如将math和computer重命名为total
    select id,name,math+cpmputer as total from exam_tb;
    as可以省略
    image.png
  • 查询结果去重
    使用distinct关键字进行去重

image.png

WHERE条件

在使用SELECT进行查询时,还可以使用WHERE条件进行筛选。有条件就会有比较和逻辑运算符。
MySql提供的比较运算符如下:

image.png
逻辑运算符

image.png

使用案例

先创建一个表,在表中插入一些数据。
筛选数学成绩大于80的。
image.png
筛选数学成绩在80-90的。

image.png
筛选成绩是99或者88的同学

image.png
筛选姓王的

image.png
还可以使用字段进行比较,比如筛选计算机成绩好于数学的。

image.png
使用as重命名的字段不能作为where筛选条件
image.png
null查询
与null进行比较的时候使用=!=是不安全的,比较的结果是null。但是比较的结果只有真假两个结果。直接使用=!=是不安全的。

image.png
使用<=>比较是安全的。但是null是0是1,也是未定义的,和0和1比较的结果都是1。

image.png
和null比较的时候推荐使用is null is not null

image.png

排序

对筛选的结果进行排序,排序方式有两种,分别是

  • ASC 为升序(从小到大) 默认为ASC
  • DESC 为降序(从大到小)

语法为:

SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];

使用示例

单段排序
筛选数学成绩大于60的,并按照升序和降序排序。

image.png
多段排序,排序优先级随书写顺序

比如数学升序,计算机降序排序

image.png
ORDER BY 中也可以使用表达式
比如总分降序排序

image.png
ORDER BY 子句中可以使用列别名

image.png

筛选分页结果

当查询一个未知表的时候,这个表可能很大,查询全表的时候容易导致数据库卡死。
这时候就需要对查询的表进行分页处理了。
语法:

SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;-- 从0开始筛选n条结果SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n offset s; --从s开始筛选n条结果

使用示例

对下标id进行分页。每页两条记录。

image.png

Update操作

对表中数据进行修改操作
语法:

UPDATE table_name SET column1=expr1 [, column2=expr2] ... [WHERE ...] [ORDER BY ...] [LIMIT ...];

一次更新一列。
image.png
一次更新多列

image.png
更新值为原值基础上变更
比如给周八同学的数学和计算机成绩加30分。

image.png
MySql不支持math+=30 这种语法。
更新全表的语句慎用!

Delete操作

删除表中的数据
语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...];

使用示例

删除表中张三的成绩

image.png

删除整张表慎用

image.png

截断表

截断表就是删除表中的所有数据,会删除表中的所有行,并释放表所占用的存储空间,但保留表的结构。
截断表的sql语句如下:

TRUNCATE [TABLE] table_name;
  • 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  • 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事务,所以无法回滚。
  • 会重置 AUTO_INCREMENT

使用示例

截断整表数据,影响行数是 0,所以实际上没有对数据真正操作。
image.png

再次插入数据时,自增主键会重置为1。
image.png

插入查询结果

将查询的结果插入到另一个表中,
语法:

INSERT INTO table_name [(column [, column ...])] SELECT ...

使用示例

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

  • 创建一张表,包含id和姓名。向表中插入一些重复的数据。

image.png

  • 要求删除表中重复的数据。 解决思路:
    • 创建一张临时表,该表的结构与测试表的结构相同。
    • 以去重的方式查询测试表中的数据,并将查询结果插入到临时表中。
    • 将测试表重命名为其他名字,再将临时表重命名为测试表的名字,实现原子去重操作。

创建临时表的时候,使用like用原表的结构创建临时表。
image.png
通过插入查询语句将去重查询后的结果插入到临时表中。

image.png
由于临时表和测试表的结构相同,并且select进行的是全列查询,因此在插入时不用在表名后指明column列表。

最后重命名一下两张表即可完成去重。

image.png

聚合函数

聚合函数是用于对一组数据执行计算并返回单个结果的函数。在 SQL 中,常用的聚合函数如下:

image.png

使用示例

  • 准备一张测试表,插入一些数据

image.png

COUNT函数

  • 使用*做统计
    在select语句中使用count函数,并将*作为参数传递给count函数,这时便能统计出表中的记录条数。
    image.png
    使用count(1)也能查询表中的记录条数。

image.png
这种做法就是在查询的时候给每一行都加了一个1。如下:

image.png

  • 使用count函数统计列中数据个数(null 不会被统计进去)

image.png

SUM函数

向表中新加一列math,记录一下数学成绩。

image.png
更新一些成绩。

image.png
使用sum函数统计数学成绩总和

image.png
也可以使用where条件筛选,比如统计大于60分的成绩和。

image.png

AVG函数

统计平均分的。
比如统计数学的平均分。

image.png
也可以使用where条件,比如统计大于60分的平均成绩

image.png

MAX函数

统计最大数
比如统计数学成绩最高的

image.png

MIN函数

统计最小的
比如统计数学成绩最低的,

image.png
也可以使用where条件,比如统计大于60分以上的最低分。

image.png

分组查询

分组查询是指对数据库中的数据进行分组,并对每个分组进行聚合计算或筛选。在 SQL 中,可以使用 GROUP BY 子句来进行分组查询。
语法:

SELECT column1, column2, ..., aggregate_function(column),
FROM table_name
GROUP BY column1, column2, ...;
  • column1, column2, ... 是要进行分组的列。
  • aggregate_function(column) 是对每个分组进行聚合计算的函数,可以是 COUNT、SUM、AVG、MIN、MAX 等聚合函数。
  • table_name 是要从中检索数据的表的名称。

使用示例

准备雇员信息表中包含三张表,分别是员工表(emp)、部门表(dept)和工资等级表(salgrade)。

员工表(emp)中包含如下字段:

  • 雇员编号(empno)。
  • 雇员姓名(ename)。
  • 雇员职位(job)。
  • 雇员领导编号(mgr)。
  • 雇佣时间(hiredate)。
  • 工资月薪(sal)。
  • 奖金(comm)。
  • 部门编号(deptno)。

部门表(dept)中包含如下字段:

  • 部门编号(deptno)。
  • 部门名称(dname)。
  • 部门所在地点(loc)。

工资等级表(salgrade)中包含如下字段:

  • 等级(grade)。
  • 此等级最低工资(losal)。
  • 此等级最高工资(hisal)。
  1. 创建三张表
mysql> create table emp(-> empno int(6) unsigned zerofill not null comment '员工编号',-> ename varchar(20) default null comment '员工姓名',-> job varchar(9) default null comment '员工职位',-> mgr int(4) zerofill default null comment '员工领导',-> hierdate datetime default null comment '雇佣时间',-> sal decimal(7,2) default null comment '月薪',-> comm decimal(7,2) default null comment'奖金',-> deptno int(2) unsigned zerofill default null comment '部门编号'-> );
Query OK, 0 rows affected (0.02 sec)mysql> desc emp;
+----------+--------------------------+------+-----+---------+-------+
| Field    | Type                     | Null | Key | Default | Extra |
+----------+--------------------------+------+-----+---------+-------+
| empno    | int(6) unsigned zerofill | NO   |     | NULL    |       |
| ename    | varchar(20)              | YES  |     | NULL    |       |
| job      | varchar(9)               | YES  |     | NULL    |       |
| mgr      | int(4) unsigned zerofill | YES  |     | NULL    |       |
| hierdate | datetime                 | YES  |     | NULL    |       |
| sal      | decimal(7,2)             | YES  |     | NULL    |       |
| comm     | decimal(7,2)             | YES  |     | NULL    |       |
| deptno   | int(2) unsigned zerofill | YES  |     | NULL    |       |
+----------+--------------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)mysql> create table salgrade(-> grade int(11) default null comment '等级',-> losal int(11) default null comment '最低工资',-> hisal int(11) default null comment '最高工资'-> );
Query OK, 0 rows affected (0.02 sec)mysql> create table dept(-> deptno int(2) zerofill not null comment '部门编号',-> dname varchar(14) default null comment '部门名称',-> loc varchar(13) default null comment '部门所在地点'-> );
Query OK, 0 rows affected (0.02 sec)mysql> desc dept;
+--------+--------------------------+------+-----+---------+-------+
| Field  | Type                     | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+-------+
| deptno | int(2) unsigned zerofill | NO   |     | NULL    |       |
| dname  | varchar(14)              | YES  |     | NULL    |       |
| loc    | varchar(13)              | YES  |     | NULL    |       |
+--------+--------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
  1. 向表中插入一些数据做测试

image.png

group by使用示例

显示每个部门的平均工资和最高工资

image.png
上述SQL会先将表中的数据按照部门号进行分组,然后各自在组内做聚合查询得到每个组的平均工资和最高工资。

  • group by也可以对多个字段进行分组
    比如显示每个部门的每种岗位的平均工资和最低工资

image.png

HAVING 条件

HAVING 子句用于在 GROUP BY 子句后对分组结果进行筛选。
它与 WHERE 子句的区别在于:

  • WHERE 子句用于在 GROUP BY 之前对行进行筛选,而 HAVING 子句用于在 GROUP BY 之后对分组进行筛选。
  • having 子句必须搭配GROUP BY使用。
  • where子句中不能使用聚合函数和别名,而having子句中可以使用聚合函数和别名。

HAVING 子句的一般语法:

SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
  • column1, column2, ... 是用于分组的列。
  • table_name 是要从中检索数据的表的名称。
  • condition 是用于筛选分组结果的条件。

使用示例

显示平均工资低于2000的部门和它的平均工资
先统计各部门平均工资,在使用having筛选小于2000的。

image.png

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

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

相关文章

【Ajax零基础教程】-----第三课 FastJson

一、Fastjson 是什么 Fastjson 是阿里巴巴的开源jSON解析库&#xff0c;它可以解析JSON格式的字符串&#xff0c;支持将javaBean序列化为JSON字符串&#xff0c;也可以从jSON字符串反序列化到javaBean。 二、Fastjson使用场景 Fastjson已经被广泛使用在各种场景&#xff0c;包…

【随笔】Git 高级篇 -- 上传命令的参数 (下)git push(三十七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

探索Java 18:未来技术趋势与革新之路

Java&#xff0c;作为一门历史悠久而又历久弥新的编程语言&#xff0c;始终站在技术发展的前沿&#xff0c;引领着软件开发的潮流。随着Java 18的发布&#xff0c;我们再次见证了这门语言的自我迭代与革新。本文将深入探讨Java 18带来的新特性、技术趋势&#xff0c;以及它如何…

Java反射机制的实战应用:探索其魅力与局限

引言 Java作为一种面向对象的编程语言&#xff0c;其灵活性和强大的功能使其成为众多开发者的首选。而Java反射机制作为Java语言中的一项重要特性&#xff0c;为程序员提供了一种在运行时检查和操作类、方法、属性等信息的能力。本文旨在深入探讨Java反射机制的实战应用&#…

单节锂电池充电芯片H4054无需外接检测电阻500mA电流7V输入

锂电池充电芯片的主要功能如下&#xff1a; 充电管理功能&#xff1a;充电芯片能够对锂电池进行智能化管理&#xff0c;根据电池的状态和需求&#xff0c;调节充电电流和电压&#xff0c;以实现快速充电、恒流充电、恒压充电等不同的充电模式。通过合理控制充电过程&#xff0…

想要在 Python 中格式化输出字符串,看这一篇就够了(方法大全)

目录&#xff1a; 使用百分号&#xff08;%&#xff09;格式化字符串使用 format()格式化字符串使用 f-string 格式化字符串使用 string.Template 格式化字符串使用 center() 格式化字符串Python 字符串格式化方法的比较 在本文中介绍不同的方法进行字符串格式化输出。包括百分…

为什么C++11还要复杂的提出右值引用?

C11引入右值引用&#xff08;使用 && 声明&#xff09;是为了解决C98中无法直接表达某些对象为“临时的”或“可移动的”这一限制&#xff0c;以及提高程序性能。右值引用的引入使得移动语义&#xff08;Move Semantics&#xff09;和完美转发&#xff08;Perfect Forw…

Excel 查找值的位置后再用位置取值Excel处理

例题描述 Excel 文件中有下图所示的 3 个片区数据 (不同颜色标明)。 现在要算出1-12对应的一列数据&#xff0c;计算规则&#xff1a;在片区3中依次查找1-12&#xff0c;找到后在片区1对应位置取数&#xff0c;如果是0则取片区2同位置的数&#xff0c;如果是1则取F当前查找数。…

算法训练Day48 | ● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()1, vector<int>(word2.size()1,0));for(int i1; i<word1.size(); i){for(int j1; j<word2.size(); j){if(word…

基于单片机的小型自动浇灌系统设计

摘 要:以单片机为主控芯片,结合传感器和计算机,搭建了一套智能化的浇灌系统;利用LabVIEW 设计并编写了基于状态机程序架构的上位机软件,实现了友好的用户交互界面,实时测量、显示与记录等功能,并由主控芯片进行浇灌。经测试,本系统具有结构简单,研制成本低,运…

Axure中继器介绍以及案例分享

中继器是 Axure 中一个比较高阶的应用&#xff0c;它可以让我们在纯静态网页中模拟出类似带有后台数据交互的增删改查的效果。 一、中继器的基本使用方法&#xff1a; 整体流程分为三个步骤 ☆创建中继器 我们先在 Axured画布中拖入一个中继器元件 双击中继器后的效果 打开之…

Python 自动化脚本系列:第1集

昨天写了一篇介绍如何使用Python实现自动化任务的&#xff0c;文章末尾介绍了一个简单的自动化脚本&#xff0c;因此今天编号从2开始。顺便附上昨天的文章链接&#xff1a; Python 自动化脚本系列&#xff1a;介绍 欢迎关注博主&#xff0c;持续输出更多Python相关内容&#…

[windows系统安装/重装系统][step-2]BIOS设置UEFI引导、磁盘分区GPT分区、安装系统[含完整操作拍照图片]

背景 先准备U盘启动盘和系统镜像: [windows系统安装/重装系统][step-1]U盘启动盘制作&#xff0c;微软官方纯净系统镜像下载 前言&#xff08;略长&#xff0c;建议可跳过&#xff09; 我的笔记本升级了CPU升级了内存后出现了一个小问题&#xff0c; 每次启动徽标显示后会…

(delphi11最新学习资料) Object Pascal 学习笔记---第11章第2节 (高级接口技术)

11.2 高级接口技术 ​ 为了进一步深入探讨接口的功能&#xff0c;在我们研究现实世界接口的使用场景之前&#xff0c;有必要介绍一些接口的高级技术特性&#xff0c;例如类如何实现多个接口&#xff0c;或如何用不同名称的方法实现接口方法&#xff08;以防名称冲突&#xff0…

【Pychart】jupyter中pyecharts无法显示问题无法使用/No module named pyecharts

无法显示或No module&#xff0c;一般就是更换python版本后&#xff0c;没有在新的python里安装jupyter&#xff1b;另外原因就是引用方式问题&#xff0c;就是import方式不对&#xff1b;都解决后&#xff0c;有报错没有add&#xff0c;或者str问题。 最后的解决方案竟然是bin…

智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境

目录 一、引言 二、智慧旅游的定义与特点 &#xff08;一&#xff09;智慧旅游的定义 &#xff08;二&#xff09;智慧旅游的特点 三、智能科技在旅游服务中的应用 &#xff08;一&#xff09;大数据分析助力旅游决策 &#xff08;二&#xff09;人工智能实现个性化推荐…

Android 网络请求 实现

Android 网络请求 实现 一、背景 在Android开发中,网络请求是一个非常常见的需求。应用程序可能需要与远程服务器通信来获取数据、上传文件、验证用户身份等等。背景下,Android应用通常会面临以下几个主要情况和挑战: ①数据交互: 许多应用程序需要从服务器获取数据,例…

杰发科技AC7840——软件Sent_HAL39X

0. 序 截止2024.5.8&#xff0c;杰发的MCU没有硬件Sent功能&#xff0c;因此使用PWM模拟Sent来试试。 测试下7840的软件sent功能。 参考链接&#xff1a;SENT协议应用笔记 - TechPlus汽车工坊的文章 - 知乎 SENT协议 1. Sent功能测试 使用提供的软件Sent代码在7840上测试&a…

医疗图像处理2023年CVPR:Label-Free Liver Tumor Segmentation-无标签肝肿瘤分割

目录 一、摘要 二、介绍 三、相关工作 四、网络框架 1.位置选择 2.纹理处理 3.形状生成 4.后处理 5.参数设计 五、实验 1.数据集&#xff1a; 2.评价指标&#xff1a; 3.实现&#xff1a; 4.结果&#xff1a; 六、结论 一、摘要 通过在CT扫描中使用合成肿瘤&am…

8086 汇编学习 Part 9

端口的读写 CPU 的邻居 CPU 内部的寄存器内存单元端口&#xff08;各种接口卡、网卡&#xff0c;显卡&#xff0c;主板上的接口芯片等&#xff09; 各种芯片工作时&#xff0c;都有一些寄存器由 CPU 读写从 CPU 角度&#xff0c;将各寄存器当端口&#xff0c;并统一编制CPU …