MySQL_第11章_数据处理之增删改

news2024/11/19 23:40:03

11_数据处理之增删改

讲师:尚硅谷 - 宋红康(江湖人称:康师傅)
官网: http://www.atguigu.com

1. 插入数据

1.1 实际问题

 

解决方式:使用 INSERT 语句向表中插入数据。

1.2 方式1VALUES的方式添加

使用这种语法一次只能向表中插入 一条 数据。
情况 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
# 3 、向 books 表中插入记录
# 1 )不指定字段名称,插入第一条记录
# 2 )指定所有字段名称,插入第二记录
# 3 )同时插入多条记录(剩下的所有记录)
id
name
authors
price
pubdate
note
num
1
Tal of AAA
Dickes
23
1995
novel
11
2
EmmaT
Jane lura
35
1993
joke
22
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) 的书的价格都增加 5
# 5 、将名称为 EmmaT 的书的价格改为 40 ,并将说明改为 drama
# 6 、删除库存为 0 的记录。
# 7 、统计书名中包含 a 字母的书
# 8 、统计书名中包含 a 字母的书的数量和库存总量
# 9 、找出 “novel” 类型的书,按照价格降序排列
# 10 、查询图书信息,按照库存量降序排列,如果库存量相同的按照 note 升序排列
# 11 、按照 note 分类统计书的数量
# 12 、按照 note 分类统计书的库存量,显示库存量超过 30 本的
# 13 、查询所有图书,每页显示 5 本,显示第二页
# 14 、按照 note 分类统计书的库存量,显示库存量最多的
# 15 、查询书名达到 10 个字符的书,不包括里面的空格
# 16 、查询书名和类型,其中 note 值为 novel 显示小说, law 显示法律, medicine 显示医药, cartoon 显示卡通,
joke 显示笑话
# 17 、查询书名、库存,其中 num 值超过 30 本的,显示滞销,大于 0 并低于 10 的,显示畅销,为 0 的显示需要无货
# 18 、统计每一种 note 的库存量,并合计总量
# 19 、统计每一种 note 的数量,并合计总量
# 20 、统计库存量前三名的图书
# 21 、找出最早出版的一本书
# 22 、找出 novel 中价格最高的一本书
# 23 、找出书名中字数最多的一本书,不含空格
答案:
#1 、创建数据库 test01_library
CREATE DATABASE IF NOT EXISTS test01_library CHARACTER SET 'utf8' ;
# 指定使用哪个数据库
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) 的书的价格都增加 5
UPDATE 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/451033.html

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

相关文章

在OpenHarmony 开发者大会2023,听见百业同鸣

加强开源&#xff0c;助推中国科技强国战略&#xff0c;已经成为中国科技繁荣的必要条件&#xff0c;“十四五”规划中首次提到了“开源”两个字&#xff0c;并明确指出&#xff0c;支持数字技术开源社区等创新联合体的发展。 在中国发展开源&#xff0c;有着拓荒的色彩&#x…

Springsecurity笔记14-18章JWT+Spring Security+redis+mysql 实现认证【动力节点】

15 SpringSecurity 集成thymeleaf 此项目是在springsecurity-12-database-authorization-method 的基础上进行 复制springsecurity-12-database-authorization-method 并重命名为springsecurity-13-thymeleaf 15.1 添加thymeleaf依赖 | <groupId>org.springframewor…

西门子s7-300/400PLC-MMC密码解密

西门子s7-300/400-MMC密码解密 简介西门子加密工具及操作密码验证 简介 目前&#xff0c;市面上或网络上有很多针对s7-200&#xff0c;300&#xff0c;400&#xff0c;1200&#xff0c;1500的密码解密破解软件&#xff0c;但很多时候只能解数字或英文密码&#xff0c;对设置了…

Linux-初学者系列——篇幅5_系统目录相关命令

系统目录相关命令-目录 一、系统目录层级1、目录绝对路径2、目录相对路径3、目录层级结构查看-tree不带任何参数获取目录结构数据信息以树形结构显示目录下的所有内容&#xff08;包含隐藏信息&#xff09;只列出根目录下第一层的目录结构信息只显示目录结构信息中的所有目录信…

ThingsBoard如何自定义topic

1、背景 业务需要,mqtt设备,他们协议和topic都定义好了,想使用tb的mqtt直接接入设备,但是设备的topic和tb规定的不一致,该如何解决呢? 2、要求 设备的topic要求规则是这样的 首先第二点是满足的,网关的发布主题是可以通过tb的设备配置来自定义遥测和属性的topic,问题…

qiankun应用级缓存-多页签缓存

需求&#xff1a; A&#xff1a;主应用 B&#xff1a;子应用 项目框架&#xff1a;vue2 全家桶 qiankun 应用间切换需要保存页面缓存&#xff08;多页签缓存&#xff09;&#xff0c;通过vue keep-alive只能实现页面级缓存&#xff0c;在单独打开的应用里能实现缓存&#xf…

德国申请专利,发明,实用,外观专利申请详细步骤

一、德国专利申请途径 申请人可以向德国专利商标局直接递交申请。要求优先权的情况下根据《保护工业产权巴黎公约》需要在递交中国在先申请的12个月之内向德国专利商标局递交申请。 另外&#xff0c;通过PCT&#xff08;“Patent Cooperation Treaty”&#xff0c;即《专利合作…

【分享】免费的AI绘画网站(5个)

哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的不断发展&#xff0c;越来越多的AI绘画软件开始涌现&#xff0c;如果你想要免费享受AI绘画的乐趣&#xff0c;那你可要好好看下面的内容~ Vega AI创作平台 入口&#xff1a;https://rightbrain.art 一款专业的…

AIGC+RPA丨大语言模型赋能实在智能数字员工“超进化”

前不久&#xff0c;全球最大上市咨询公司埃森哲发布2023年技术愿景《When Atoms meet Bits》报告&#xff0c;并在当中深度解析到&#xff1a;生成式AI成为2023年四大技术发展趋势之一。 大型语言模型&#xff08;Large Language Model, LLM&#xff09;领域的研发和布局在国内…

如何科学判断研发团队是否在健康工作?(内附量表)

研发效能管理覆盖了交付速度、质量和价值三个维度&#xff0c;但文化建设、团队氛围和客户协作等其他因素对团队工作的影响又该如何度量和管理呢&#xff1f; LigaAI 在 John Cutler 的一篇分享中找到了答案&#xff1a;团队健康度评分。就像我们都很关心自己的身体健康一样&a…

《程序员面试金典(第6版)》面试题 16.02. 单词频率(哈希法,C++)

题目描述 设计一个方法&#xff0c;找出任意指定单词在一本书中的出现频率。 你的实现应该支持如下操作&#xff1a; WordsFrequency(book)构造函数&#xff0c;参数为字符串数组构成的一本书get(word)查询指定单词在书中出现的频率 示例&#xff1a; WordsFrequency word…

DevEco Studio 3.1 Beta新特性知多少

HUAWEI DevEco Studio是开发HarmonyOS应用及服务的一站式集成开发环境&#xff08;IDE&#xff09;。本次&#xff0c;DevEco Studio 3.1 Beta新增支持当前在市面上新的操作系统&#xff0c;如Windows11、macOS&#xff08;ARM&#xff09;操作系统&#xff0c;还面向HarmonyOS…

4.数据结构(0x3f:从周赛中学算法 2022下)

来自0x3f【从周赛中学算法 - 2022 年周赛题目总结&#xff08;下篇&#xff09;】&#xff1a;https://leetcode.cn/circle/discuss/WR1MJP/ 包括堆&#xff08;优先队列&#xff09;、单调栈、单调队列、字典树、并查集、树状数组、线段树等。 学习这些只是开始&#xff0c;能…

Pytorch对机器学习模型的安全漏洞攻击方法之Fast Gradient Sign Attack(FGSM,快速梯度符号攻击)

原论文&#xff1a;EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES 一般本人的习惯是先看论文熟悉它&#xff0c;然后代码去实现它&#xff0c;这样感觉要好点。因为论文讲解的比较全面和一些实验对比还有很多的引用等&#xff0c;另外大家知道好论文基本都是英文&#xff0c…

【Python】【进阶篇】2、Django MTV和MVC的区别

目录 2、Django MTV和MVC的区别1. MVC设计模式2. MTV设计模式 2、Django MTV和MVC的区别 在上一节《Django是什么》中&#xff0c;我们对 Django 的诞生以及 Web 框架的概念有了基本的了解&#xff0c;本节我们介绍 Django 的设计模式&#xff0c;也就是 MTV。 在 Web 开发领…

Point cloud tools for Matlab(点云学习工具)

Point cloud tools for Matlab (tuwien.ac.at)https://www.geo.tuwien.ac.at/downloads/pg/pctools/pctools.html#PointCloud_class 下载&#xff1a;Download Matlab Code 添加路径 addpath(genpath(D:\MyMatlabCode\pointCloudTools)); pc pointCloud(Lion.xyz); pc.plot…

AI绘画——ChilloutMix模型(现实真人,实现写实逼真的图像)

目录 重要提示&#xff1a;首先&#xff0c;我从不建议再生“真实”人物的图像&#xff0c; 但是&#xff0c;照片“逼真”图像。 本人郑重声明&#xff1a;本模型原则上禁止用于训练基于明星、公众人物肖像的风格模型训练&#xff0c;因为这会带来争议&#xff0c;对AI社区…

全网详细介绍百度低代码框架amis及实例讲解

文章目录 1. 文章引言2. amis官网3. amis介绍3.1 amis的简述3.2 amis的初衷3.3 amis的其他亮点3.4 amis不适之处 4. amis使用4.1 amis框架集成4.2 amis切换主题4.3 amis配置与组件4.4 amis变量 5. amis实例5.1 amis实例5.2 列表查询5.3 查看详情5.4 自定义操作按钮5.5 提交表单…

你知道ChatGPT中的数据模型是什么吗?

本文将为你揭开ChatGPT和GPT-4中使用的以数据为中心的人工智能技术的秘密。 人工智能在改变我们的生活、工作和与技术互动的方式方面取得了令人难以置信的进步。最近&#xff0c;一个取得重大进展的领域是大型语言模型&#xff08;LLM&#xff09;的开发&#xff0c;如​​GPT…

二十、SQL 数据分析基础与进阶(一)

文章目录 一、破冰 SELECT 基础检索1.1 检索所需要的列1.1.1 检索单列数据1.1.2 检索多列数据 1.2 * 符号初体验1.3 独特的 DISTINCT1.4 使用 ORDER BY 排序检索结果1.5 使用 LIMIT 限制返回行数1.6 ORDER BY 与 LIMIT 结合的妙用 二、过滤数据&#xff0c;选你所想三、计算字段…