九.数据处理之增删改

news2025/1/15 17:42:24

数据处理之增删改

  • 1.插入数据
    • 1.1实际问题
    • 1.2方式1:VALUES的方式添加
    • 1.3方式2:将查询结果插入到表中
  • 2.更新数据
  • 3.删除数据
  • 4.MySQL8新特性:计算列
  • 5.综合案例

1.插入数据

1.1实际问题

在这里插入图片描述
解决方式:使用INSERT语句向表中插入数据

1.2方式1:VALUES的方式添加

使用这种语法一次只能向表中插入一条数据。
情况1:为表的所有字段按默认顺序插入数据

INSERT INTO 表名
VALUES (value1,value2,....);

值列表中需要为表得到每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同
举例:

INSERT INTO departments
VALUES (70, 'Pub', 100, 1700);

INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);

情况2:为表的指定字段插入数据

INSERT INTO 表名(column1 [, column2,, columnn])
VALUES (value1 [,value2,, valuen]);

为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。
在 INSERT 子句中随意列出列名,但是一旦列出,VALUES中要插入的value1,…valuen需要与column1,…columnn列一一对应。如果类型不同,将无法插入,并且MySQL会产生错误。
举例:

INSERT INTO departments(department_id, department_name)
VALUES (80, 'IT');

情况3:同时插入多条记录
INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开,基本语法格式如下:

INSERT INTO table_name
VALUES
(value1 [,value2,, valuen]),
(value1 [,value2,, valuen]),
……
(value1 [,value2,, valuen]);

或者

INSERT INTO table_name(column1 [, column2,, columnn])
VALUES
(value1 [,value2,, valuen]),
(value1 [,value2,, valuen]),
……
(value1 [,value2,, valuen]);

举例:

mysql> INSERT INTO emp(emp_id,emp_name)
-> VALUES (1001,'shkstart'),
-> (1002,'atguigu'),
-> (1003,'Tom');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

使用INSERT同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息,这些信息的含义如下: ● Records:表明插入的记录条数。 ● Duplicates:表明插入时被忽略的记录,原因可能是这
些记录包含了重复的主键值。 ● Warnings:表明有问题的数据值,例如发生数据类型转换。

一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句
在处理过程中 效率更高 。因为MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句
快,所以在插入多条记录时最好选择使用单条INSERT语句的方式插入。

小结

  • VALUES也可以写成VALUE,但是VALUES是标准写法。

  • 字符和日期型数据应包含在单引号中。

1.3方式2:将查询结果插入到表中

INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速从一个或多个表中向一个表中插入多行。
基本语法格式如下:

INSERT INTO 目标表名
(tar_column1 [, tar_column2,, tar_columnn])
SELECT
(src_column1 [, src_column2,, src_columnn])
FROM 源表名
[WHERE condition]
  • 在INSERT语句中加入子查询
  • 不必书写VALUES子句
  • 子查询中的值列表应与INSERT子句中的列名对应
    举例:
INSERT INTO emp2
SELECT *
FROM employees
WHERE department_id = 90;

INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

2.更新数据

在这里插入图片描述

  • 使用UPDATE语句更新数据。语法如下:
UPDATE table_name
SET column1=value1, column2=value2,, column=valuen
[WHERE condition]
  • 可以一次更新多条数据
  • 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
  • 使用WHERE子句指定更新的数据
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
  • 如果省略WHERE子句,则表中的所有的数据都将被更新
UPDATE copy_emp
SET department_id = 110;
  • 更新中的数据完整性错误
UPDATE employees
SET department_id = 55
WHERE department_id = 110;

在这里插入图片描述

说明:不存在55号部门

3.删除数据

在这里插入图片描述

  • 使用DELETE语句从表中删除数据
    在这里插入图片描述
DELETE FROM table_name [WHERE <condition>];

table_name指定要执行删除操作的表;“[WHERE ]”为可选参数,指定删除条件,如果没有WHERE子句,DELETE语句将删除表中的所有记录。

  • 使用WHERE子句删除指定的记录
DELETE FROM departments
WHERE department_name = 'Finance';
  • 如果省略WHERE子句,则表中的全部数据将被删除
DELETE FROM copy_emp;
  • 删除表中的数据完整性错误
DELETE FROM departments
WHERE department_id = 60;

在这里插入图片描述

说明:You cannot delete a row that contains a primary key that is used as a foreign key in another
table.

4.MySQL8新特性:计算列

什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。例如,a列值为1、b列值为2,c列不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。

在MySQL 8.0中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。下面以CREATE TABLE为例进行讲解。

举例:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的值。 首先创建测试表tb1,语句如下:

CREATE TABLE tb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL
);

插入演示数据,语句如下:

INSERT INTO tb1(a,b) VALUES (100,200);

查询表tb1中的数据,结果如下:

mysql> SELECT * FROM tb1;
+------+------+------+------+
| id | a | b | c |
+------+------+------+------+
| NULL | 100 | 200 | 300 |
+------+------+------+------+
1 row in set (0.00 sec)

更新数据中的语句,语句如下:

mysql> UPDATE tb1 SET a = 500;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0

5.综合案例

  1. 创建数据库test01_library
  2. 创建表 books,表结构如下:
字段名字段说明数据类型
id书编号INT
name书名VARCHAR(50)
authors作者VARCHAR(100)
price价格FLOAT
pubdate出版日期YEAR
note说明VARCHAR(100)
num库存INT
  1. 向books表中插入记录
    1)不指定字段名称,插入第一条记录
    2)指定所有字段名称,插入第二记录
    3)同时插入多条记录(剩下的所有记录)
idnameauthorepricepubdatenotenum
1Tal of AAADickes231995novel11
2EmmaTJane lura351993joke22
3Story of Jane JaneTim402001novel0
4Lovey DayGeorge Byron202005novel30
5Old landHonore Blade302010law0
6The BattleUpton Sara301999medicine40
7Rose HoodRichard haggard282008cartoon28
  1. 将小说类型(novel)的书的价格都增加5。
  2. 将名称为EmmaT的书的价格改为40,并将说明改为drama。
  3. 删除库存为0的记录。
  4. 统计书名中包含a字母的书
  5. 统计书名中包含a字母的书的数量和库存总量
  6. 找出“novel”类型的书,按照价格降序排列
  7. 查询图书信息,按照库存量降序排列,如果库存量相同的按照note升序排列
  8. 按照note分类统计书的数量
  9. 按照note分类统计书的库存量,显示库存量超过30本的
  10. 查询所有图书,每页显示5本,显示第二页
  11. 按照note分类统计书的库存量,显示库存量最多的
  12. 查询书名达到10个字符的书,不包括里面的空格
  13. 查询书名和类型,其中note值为novel显示小说,law显示法律,medicine显示医药,cartoon显示卡通,joke显示笑话
  14. 查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,显示畅销,为0的显示需要无货
  15. 统计每一种note的库存量,并合计总量
  16. 统计每一种note的数量,并合计总量
  17. 统计库存量前三名的图书
  18. 找出最早出版的一本书
  19. 找出novel中价格最高的一本书
  20. 找出书名中字数最多的一本书,不含空格
1.创建数据库test01_library
CREATE DATABASE test01_library  CHARACTER SET uft8;
#指定使用哪个数据库
USE test01_library;

2.创建表 books
CREATE TABLE books(
id INT,
name VARCHAR(50),
`authors` VARCHAR(100) ,
price FLOAT,
pubdate YEAR ,
note VARCHAR(100),
num INT
);

3.向books表中插入记录
# 1)不指定字段名称,插入第一条记录
INSERT INTO books
VALUES(1,'Tal of AAA','Dickes',23,1995,'novel',11);
# 2)指定所有字段名称,插入第二记录
INSERT INTO books (id,name,`authors`,price,pubdate,note,num)
VALUES(2,'EmmaT','Jane lura',35,1993,'Joke',22);
# 3)同时插入多条记录(剩下的所有记录)
INSERT INTO books (id,name,`authors`,price,pubdate,note,num) VALUES
(3,'Story of Jane','Jane Tim',40,2001,'novel',0),
(4,'Lovey Day','George Byron',20,2005,'novel',30),
(5,'Old land','Honore Blade',30,2010,'Law',0),
(6,'The Battle','Upton Sara',30,1999,'medicine',40),
(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28);

4.将小说类型(novel)的书的价格都增加5UPDATE books SET price=price+5 WHERE note = 'novel';

5.将名称为EmmaT的书的价格改为40,并将说明改为drama。
UPDATE books SET price=40,note='drama' WHERE name='EmmaT';

6.删除库存为0的记录。
DELETE FROM books WHERE num=0;

7.统计书名中包含a字母的书
SELECT * FROM books WHERE name LIKE '%a%';

8.统计书名中包含a字母的书的数量和库存总量
SELECT COUNT(*),SUM(num) FROM books WHERE name LIKE '%a%';

9.找出“novel”类型的书,按照价格降序排列
SELECT * FROM books WHERE note = 'novel' ORDER BY price DESC;

10.查询图书信息,按照库存量降序排列,如果库存量相同的按照note升序排列
SELECT * FROM books ORDER BY num DESC,note ASC;

11.按照note分类统计书的数量
SELECT note,COUNT(*) FROM books GROUP BY note;

12.按照note分类统计书的库存量,显示库存量超过30本的
SELECT note,SUM(num) FROM books GROUP BY note HAVING SUM(num)>30;

13.查询所有图书,每页显示5本,显示第二页
SELECT * FROM books LIMIT 5,5;

14.按照note分类统计书的库存量,显示库存量最多的
SELECT note,SUM(num) sum_num FROM books GROUP BY note ORDER BY sum_num DESC LIMIT 0,1;

15.查询书名达到10个字符的书,不包括里面的空格
SELECT * FROM books WHERE CHAR_LENGTH(REPLACE(name,' ',''))>=10;

/*
16. 查询书名和类型,
 其中note值为 novel显示小说,law显示法律,medicine显示医药,cartoon显示卡通,joke显示笑话
*/
SELECT name AS "书名" ,note, CASE note 
 WHEN 'novel' THEN '小说'
 WHEN 'law' THEN '法律'
 WHEN 'medicine' THEN '医药'
 WHEN 'cartoon' THEN '卡通'
 WHEN 'joke' THEN '笑话'
 END AS "类型"
FROM books;


17.查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,显示畅销,为0的显示需要无货
SELECT name,num,CASE 
  WHEN num>30 THEN '滞销'
  WHEN num>0 AND num<10 THEN '畅销'
  WHEN num=0 THEN '无货'
  ELSE '正常'
  END AS "库存状态"
FROM books;

18.统计每一种note的库存量,并合计总量
SELECT IFNULL(note,'合计总库存量') AS note,SUM(num) FROM books GROUP BY note WITH ROLLUP;

19.统计每一种note的数量,并合计总量
SELECT IFNULL(note,'合计总数') AS note,COUNT(*) FROM books GROUP BY note WITH ROLLUP;

20.统计库存量前三名的图书
SELECT * FROM books ORDER BY num DESC LIMIT 0,3;

21.找出最早出版的一本书
SELECT * FROM books ORDER BY pubdate ASC LIMIT 0,1;

22.找出novel中价格最高的一本书
SELECT * FROM books WHERE note = 'novel' ORDER BY price DESC LIMIT 0,1;

23.找出书名中字数最多的一本书,不含空格
SELECT * FROM books ORDER BY CHAR_LENGTH(REPLACE(name,' ','')) DESC LIMIT 0,1;

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

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

相关文章

LEFT JOIN

通過中間表説明 biz_email_sent table1 biz_email table2 biz_email_sent_address 中間表 LEFT JOIN 是 JOIN 左邊的記錄(biz_email_sent id52)全部查出&#xff0c;比如52 的記錄全部查出。 即使中間表se.sa_email_id 在 table2中找不到&#xff0c…

打破枯燥工作日,用Python统计键盘和鼠标点击次数,钉钉告诉你今天摸鱼了多少次!

1 前言 是否曾想过&#xff0c;在一天的工作中&#xff0c;你到底点击了键盘多少次&#xff0c;或者鼠标点击了多少下&#xff1f; 是否好奇每天工作的时候&#xff0c;自己究竟有多努力&#xff1f; 本文将带你使用 Python&#xff0c;利用 pynput 监听键盘和鼠标事件&…

mysql原理--连接的原理

1.连接简介 1.1.连接的本质 为了故事的顺利发展&#xff0c;我们先建立两个简单的表并给它们填充一点数据&#xff1a; mysql> CREATE TABLE t1 (m1 int, n1 char(1)); mysql> CREATE TABLE t2 (m2 int, n2 char(1)); mysql> INSERT INTO t1 VALUES(1, a), (2, b), (…

2023年12月20日雄县采样

刚去的时候&#xff0c;找不着冬小麦地&#xff0c;因为积雪太厚了&#xff0c;小麦都被埋住了。 翻了几波地失败了几个点&#xff0c;也渐渐得出经验了&#xff0c;像下图这种有田垄的大块连成片农田&#xff0c;“高标准”农田。一定是种植小麦的。 刨开土能看到小麦就和挖到…

图片曝光修正方法(直方图均衡和CNN)

图像过曝或曝光不足时需要曝光处理&#xff0c; 这里以曝光不足举例。 直方图均衡法&#xff1a; 通过RGB通道的直方图均衡达到处理曝光不足的效果。 代码&#xff1a; underexpose cv2.imread("exposure_test.jpg") #underexpose cv2.cvtColor(underexpose, cv2…

软件设计模式:UML类图

文章目录 前言一、&#x1f4d6;设计模式概述1.软件设计模式的产生背景2.软件设计模式3.设计模式分类 二、&#x1f4e3;UML图1.类图概述2.类的表示法3.类与类之间的关系关联关系&#xff08;1&#xff09;单向关联&#xff08;2&#xff09;双向关联&#xff08;3&#xff09;…

VM安装Sonoma【笔记】

VMware Workstation安装MacOS Sonoma 1、配置虚拟机&#xff0c;根据系统性能调整参数&#xff1b; 2、先不焦急启动虚拟机&#xff0c;打开虚拟机存储目录&#xff0c;以文本方式打开.vmx文件&#xff08;这里以Sonoma.vmx为例&#xff09;&#xff1b; 这里只针对Inter CP…

异步编程Promise

文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误&#xff08;error&#xff09;和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中&#xff0c;promise的使…

阿赵UE学习笔记——2、新建项目和项目设置

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。继续来学习虚幻引擎的使用。这次介绍一下新建项目和项目设置。 一、新建项目 通过桌面快捷方式&#xff0c;或者EPIC Games Loader&#xff0c;启动虚幻引擎。 启动完成后&#xff0c;会打开项目管理的界面&#xff0c;可以看…

HarmonyOS ArkTS 中DatePicker先择时间 路由跳转并传值到其它页

效果 代码 代码里有TextTimerController 这一种例用方法较怪&#xff0c;Text ,Button Datepicker 的使用。 import router from ohos.router’则是引入路由模块。 import router from ohos.router Entry Component struct TextnewClock {textTimerController: TextTimerContr…

【开源项目】基于STM32的服装仓库环境监测系统设计与实现

该系统结合了多种物联网的技术如WiFi技术、嵌入式技术等&#xff0c;通过温湿度传感器和火焰传感器实时采集仓库的温度、空气湿度和仓库明火情况。系统能够自动判断并处理异常情况&#xff0c;当温湿度超过阈值时风扇模块开始工作进行通风&#xff0c;当有明火时抽水泵模块开始…

计算机msvcp120.dll文件丢失怎么办?亲测有效的五个方法分享

最近&#xff0c;我在使用电脑的过程中遇到了一个非常棘手的问题&#xff0c;那就是msvcp120.dll文件丢失。这个错误通常会导致某些应用程序无法正常运行。经过一番努力和尝试&#xff0c;我终于找到了解决这个问题的方法&#xff0c;&#xff0c;小编将介绍五个常用的解决方法…

自定义 spring-boot组件自动注入starter

1&#xff1a;创建maven项目 2&#xff1a;pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati…

ITIL® 4 Foundation​,12月23日即将开课~想了解点击查看

ITIL 4 Foundation即将开课~ 想报名的必须提前预约啦 &#x1f447;&#x1f447;&#x1f447; 培训地点&#xff1a; 远程直播&#xff1a;线上平台学习 开课时间&#xff1a; 周末班&#xff1a;12月23日、24日&#xff1b; 什么是ITIL&#xff1f; 信息技术基础架构…

28 在Vue3中监听对象属性

概述 更多的时候&#xff0c;我们可能想要监听的是对象中的某个属性。 比如&#xff0c;我们提交用户的登录表单&#xff0c;有username&#xff0c;password和re_password的三个属性&#xff0c;我们监听re_password这个属性&#xff0c;一旦发生改变&#xff0c;我们就要判…

网络基础介绍

1.网线制作 1.1 网线制作需要的工具 网线 网线钳 水晶头 测试仪 ​编辑 1.2 网线的标准 1.3 网线的做法 2.集线器&交换机&路由器的介绍 3.OSI七层模型 4.路由器的设置 4.1 常见的路由器设置地址 4.2 常见的路由器账号密码 4.3 登录路由器 设置访客网…

神经网络:池化层知识点

1.CNN中池化的作用 池化层的作用是对感受野内的特征进行选择&#xff0c;提取区域内最具代表性的特征&#xff0c;能够有效地减少输出特征数量&#xff0c;进而减少模型参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling)&a…

【MongoDB】--MongoDB的Sort排序问题

目录 一、问题背景描述1.1、问题背景1.2、问题分析 二、建立索引支持深度翻页查询2.1、调整sort排序的内存限制【不建议】2.2、创建索引2.3、拓展--组合索引什么时候失效 二、聚合查询解决深度翻页查询 一、问题背景描述 1.1、问题背景 现实系统页面翻页到20000页之后&#x…

Eclipse导入SSM项目

Eclipse导入SSM项目 导入项目 配置JDK环境 去除校验 设置Tomcat 效果如下&#xff1a; 配置Tomcat端口 启动Tomcat

【数据结构和算法】盛最多水的容器

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;暴力枚举 2.2 方法二&#xff1a;双指针 三、代码 3.1 方法一&#xff1a;暴力…