【MySQL】数据处理之增删改

文章目录


一、增加(插入)INSERT INTO...VALUES(...,...)

VALUES的方式添加

情况一:为表的所有字段按默认顺序插入数据

  • 一次只能向表中插入一条数据

格式:

sql 复制代码
INSERT INTO 表名
VALUES (value1,value2,....);

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

举例:

sql 复制代码
INSERT INTO departments
VALUES(5050,'鹅国',NULL,3200);

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

  • 只向部分字段中插入值,而其他字段的值为表定义时的默认值
  • 表名后面指定的列名,在values内要一一对应,否则报错

格式:

sql 复制代码
INSERT INTO 表名(column1 [, column2, ..., columnn]) 
VALUES (value1 [,value2, ..., valuen]);

举例:

sql 复制代码
INSERT INTO departments(department_id,department_name)
VALUES(404,666);

情况三:同时插入多条记录

格式:

所有字段

sql 复制代码
INSERT INTO table_name 
VALUES 
(value1 [,value2, ..., valuen]),
(value1 [,value2, ..., valuen]),
......
(value1 [,value2, ..., valuen]);

部分字段

sql 复制代码
INSERT INTO table_name(column1 [, column2, ..., columnn]) 
VALUES 
(value1 [,value2, ..., valuen]),
(value1 [,value2, ..., valuen]),
......
(value1 [,value2, ..., valuen]);

举例:

sql 复制代码
INSERT INTO departments
VALUES
(1017,'散人',NULL,3000),
(1010,'KB',NULL,2800);

总结:

  • VALUES也可以写成VALUE,但是VALUES是标准写法。
  • 字符日期型数据应包含在单引号中。

将查询结果插入到表中

INSERT还可以将SELECT语句查询的结果插入到表中
格式:

sql 复制代码
INSERT INTO 目标表名
(tar_column1 [, tar_column2, ..., tar_columnn])
SELECT
(src_column1 [, src_column2, ..., src_columnn])
FROM 源表名
[WHERE condition]
  • 在 INSERT 语句中加入子查询。
  • 不必书写 VALUES 子句。
  • 子查询中的值列表应与 INSERT 子句中的列名对应。

举例:

添加所有字段

sql 复制代码
INSERT INTO emp2
SELECT * 
FROM employees
WHERE department_id = 90;

添加部分字段:

sql 复制代码
INSERT INTO emp1(employee_id,last_name,salary,email,hire_date,job_id)
SELECT employee_id,last_name,salary,email,hire_date,job_id
FROM employees
WHERE job_id LIKE '%IT%';

二、修改(更新)UPDATE...SET...

格式:

sql 复制代码
UPDATE table_name
SET column1=value1, column2=value2, ... , column=valuen
[WHERE condition]
  • 可以一次更新多条数据。
  • 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;

使用 WHERE 子句指定需要更新的数据

sql 复制代码
UPDATE departments
SET department_name = '紫色'
WHERE department_id = 404;

如果省略 WHERE 子句,则表中的所有数据都将被更新

这种情况一边查找一边修改,不能这样写:这是错的改不了

sql 复制代码
UPDATE employees
SET    department_id = 4040
WHERE  department_id = 404;

三、删除 DELETE FROM ...

sql 复制代码
DELETE FROM table_name [WHERE <condition>];

"[WHERE <condition>]"为可选参数,指定删除条件

如果没有WHERE子句,DELETE语句将删除表中的所有记录

举例:

使用 WHERE 子句删除指定的记录

如果省略 WHERE 子句,则表中的全部数据将被删除

四、计算列

先定义 两个列 , 第三个列是前两个列的综合(相加的数or...)

sql 复制代码
CREATE TABLE tb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL
);

CREATE TABLEALTER TABLE 中都支持增加计算列

sql 复制代码
INSERT INTO tb1(a,b)
VALUES (100,200);
sql 复制代码
UPDATE tb1
SET a = 500;

综合案例

sql 复制代码
# 1、创建数据库test01_library
CREATE DATABASE IF NOT EXISTS test01_library;

# 2、使用当前数据库
USE test01_library;

# 3、当创建数据库时忘记添加字符集时 -> 修改数据库字符集
ALTER DATABASE test01_library CHARACTER SET 'utf8';

# 4、创建表
CREATE TABLE IF NOT EXISTS books
(
	id INT,
	name VARCHAR(50),
	authors VARCHAR(100),
	price FLOAT,
	pubdate YEAR,
	note VARCHAR(100),
	num INT
);

# 5、插入记录
# 	1)不指定字段名称,插入第一条记录
INSERT INTO books
VALUES(1,'道德经','老子',25.5,'1999','国学',66);

# 	2)指定所有字段名称,插入第二记录
INSERT INTO books(id,name,authors,price,pubdate,note,num)
VALUES(2,'传习录','王阳明',19.9,'2020','国学',99);

# 	3)同时插入多条记录(剩下的所有记录)
INSERT INTO books
VALUES
(3,'三国演义','罗贯中',55.7,'2019','历史',33),
(4,'三体','刘慈欣',11.8,'2024','科幻',20),
(5,'计算之魂','吴军',35.2,'2015','科学',6);

DESC books;

# 题目:
# 6、将小说类型('国学')的书的价格都增加5。
UPDATE books
SET price = price + 5
WHERE note = '国学';

# 7、将作者为刘慈欣的书的价格改为40,并将说明改为现实。
UPDATE books
SET price = 40,note = '现实'
WHERE authors = '刘慈欣';

# 8、删除库存为0的记录。
INSERT INTO books
VALUES(6,'百年孤独','马尔克斯',99.9,'2012','魔幻',0);

DELETE FROM books
WHERE num = 0;


# 题目:
INSERT INTO books(id,NAME,AUTHORS,price,pubdate,note,num)
VALUES
(7,'数学之美','吴军',23,'1995','科学',11),
(8,'局外人','加缪',35,'1993','现实',22),
(9,'C#图解教程','丹尼尔',40,2001,'计算机',0),
(10,'算法','罗伯特',20,2005,'计算机',30),
(11,'数据密集型应用系统设计','马丁',30,2010,'计算机',0),
(12,'活着','余华',30,1999,'现实',40),
(13,'白夜行','东野圭吾',28,2008,'悬疑',28);

# 7、统计书名中包含'三'的书
SELECT COUNT(*)
FROM books
WHERE NAME LIKE '%三%';

# 8、统计书名中包含'三'的书的数量和库存总量
SELECT COUNT(*),SUM(num)
FROM books
WHERE NAME LIKE '%三%';

# 9、找出"计算机"类型的书,按照价格降序排列
SELECT name,note,price 
FROM books
WHERE note = '计算机'
ORDER BY price DESC;

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

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

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

# 13、查询所有图书,每页显示5本,显示第二页
SELECT *
FROM books
LIMIT 0,5; -- 第一页

SELECT *
FROM books
LIMIT 5,5; -- 第二页

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

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

# 16、查询书名和类型,其中note值为计算机显示科学,国学显示历史
SELECT name,CASE note
	WHEN '计算机' THEN
		'科学6666'
	WHEN '国学' THEN
		'历史66666666'
	ELSE
		note
END 
FROM books;  -- 相当于switch语句

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

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

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

# 20、统计库存量前三名的图书
SELECT SUM(num),name
FROM books
GROUP BY name
ORDER BY SUM(num) DESC
LIMIT 0,3

SELECT * FROM books ORDER BY num DESC LIMIT 0,3;

# 21、找出最早出版的一本书
SELECT name,pubdate
FROM books
ORDER BY pubdate
LIMIT 0,1;

# 22、找出计算机note中价格最高的一本书
SELECT name,price
FROM books
WHERE note = '计算机'
ORDER BY price DESC
LIMIT 0,1;

# 23、找出书名中字数最多的一本书,不含空格
SELECT name 
FROM books
ORDER BY CHARACTER_LENGTH(REPLACE(name,' ','')) DESC
LIMIT 0,1;
相关推荐
难以触及的高度13 分钟前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)27 分钟前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
莫叫石榴姐1 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer2 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪3 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis