MySQL数据的增删改查

1、DML语句

DML全称为Data Manipulation Language,表示数据操作语言。主要是对表数据的增删改查操作。因此DML只包括INSERT,UPDATADELETE

1.1、INSERT语句

sql 复制代码
-- 需要注意,VALUES后的字段值必须与表名后的字段名一一对应
INSERT INTO 表名(字段名1, 字段名2, ..., 字段名n) VALUES(字段值1, 字段值2, ..., 字段值
n);
-- 需要注意,VALUES后的字段值必须与创建表时的字段顺序保持一一对应
INSERT INTO 表名 VALUES(字段值1, 字段值2, ..., 字段值n);
-- 一次性插入多条数据
INSERT INTO 表名(字段名1, 字段名2, ..., 字段名n) VALUES(字段值1, 字段值2, ..., 字段值
n),(字段值1, 字段值2, ..., 字段值n), ... , (字段值1, 字段值2, ..., 字段值n);
INSERT INTO 表名 VALUES(字段值1, 字段值2, ..., 字段值n), (字段值1, 字段值2, ..., 字段值
n), ..., (字段值1, 字段值2, ..., 字段值n);

eg:

sql 复制代码
INSERT INTO course(`number`, name, score, `time`) VALUES (1, 'C++基础', 4, 40);
INSERT INTO course VALUES (2, '数据库', 3, 20);
INSERT INTO course(`number`, score, name, `time`) VALUES (3, 5, 'Jsp', 40);
INSERT INTO course(`number`, name, score, `time`) VALUES (4, 'Spring', 4, 5),(5, 
'Spring Mvc', 2, 5);
INSERT INTO course VALUES (6, 'SSM', 2, 3), (7, 'Spring Boot', 2, 2);

1.2、 UPDATE语句

sql 复制代码
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2, ..., 字段名n=字段值n] [WHERE 修改条件]

1.2.1、WHERE条件子句

在SQL语句中,条件的表示是使用关系运算符来表示,使用>,<,>=,<=,!=来表示;条件之间的连接通常是使用逻辑运算符来表示,通常使用AND来表示逻辑与(&&),使用OR来表示逻辑或(||)。

eg:

sql 复制代码
WHERE time>10 && time<20;
WHERE time>20 and time<=50;

1.2.2、UPDATA语句

eg:

将数据库中的学分更改为5,学时更改为11

sql 复制代码
UPDATA course SET score=5, 'time'=11 WHERE name='数据库';

1.3、DELETE语句

sql 复制代码
DELETE FROM 表名 [WHERE 删除条件];

eg:删除课程表中课程编号为6的数据

sql 复制代码
DELETE FROM course WHERE 'number'=6;

1.4、TRUNCATE语句

sql 复制代码
-- 清空表中数据
TRUNCATE [TABLE] 表名;

eg:清空课程表数据

sql 复制代码
TRUNCATE course;

1.5、DELETE与TRUNCATE区别

  • DELETE语句根据条件删除表中数据,而TRUNCATE语句则是将表中数据全部清空;如果DELETE语句要删除表中所有数据,那么在效率上要低于TRUNCATE语句。
  • 如果表中有自增长列,TRUNCATE语句会重置自增长的计数器,但DELETE语句不会。
  • TRUNCATE语句执行后,数据无法恢复,而DELETE语句执行后,可以使用事务回滚进行恢复。

2、DQL语句

DQL全称是Data Query Language,表示数据查询语言。体现在数据的查询操作上,因此,DQL仅包括SELECT语句。

2.1、SELECT语句

sql 复制代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n] 
FROM 表名 WHERE 查询条件

解释 :ALL表示查询所有满足条件的记录,可以省略;DISTINCT表示去掉查询结果中重复的记录,AS可以给数据列、数据表取一个别名。

eg:从课程表中查询课程编号大于6的课程名称

sql 复制代码
SELECT name FROM course WHERE 'number'>6;

eg:从课程表中查询课程名称为"C++基础"的学分和学时

sql 复制代码
SELECT score , 'time' FROM course WHERE name='C++基础';

2.2、比较操作符

操作符 语法 说明
IS NULL 字段名 IS NULL 如果字段的值为NULL,则条件满足
IS NOT NULL 字段名 IS NOT NULL 如果字段的值不为NULL,则条件满足
BETWEEN...AND 字段名 BETWEEN 最小值 AND 最大值 如果字段的值在最小值与最大值之间(能够取到最小值和最大值),则条件满足
LIKE 字段名 LIKE '%匹配内容%' 如果字段值包含有匹配内容,则条件满足
IN 字段名 IN(值1,值2,..., 值n) 如果字段值在值1,值2, ...,值n中,则条件满足

eg:从课程表查询课程名为NULL的课程信息

sql 复制代码
SELECT * FROM course WHERE name IS NULL;

eg:从课程表查询课程名不为NULL的课程信息

sql 复制代码
SELECT * FROM course WHERE name IS NOT NULL;

eg:从课程表查询学分在2~4之间的课程信息

sql 复制代码
SELECT * FROM course WHERE score BETWEEN 2 AND 4;

eg:从课程表查询课程名包含"V"的课程信息

sql 复制代码
SELECT * FROM course WHERE name LIKE '%V%';

eg:从课程表查询课程名以"J"开头的课程信息

sql 复制代码
SELECT * FROM course WHERE name LIKE 'J%';

eg:从课程表查询课程编号为1,3,5的课程信息

sql 复制代码
SELECT * FROM course WHERE `number` IN (1, 3, 5);

2.3、分组

2.3.1、分组查询

sql 复制代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n] 
FROM 表名 WHERE 查询条件 GROUP BY 字段名1,字段名2,..., 字段名n

分组查询所得的结果只是该组中的第一条数据。

eg:从学生表查询成绩在80分以上的学生信息并按性别分组

sql 复制代码
SELECT * FROM student WHERE score>80 GROUP BY sex

2.3.2、聚合函数

  • COUNT():统计满足条件总条数
    eg:从学生表查询成绩在80分以上的学生人数
sql 复制代码
SELECT COUNT(*) total FROM student WHERE score>80;
  • SUM():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的总和
    eg:从学生表查询不及格的学生人数和总成绩
sql 复制代码
SELECT COUNT(*) totalCount, SUM(score) totalScore FROM student WHERE 
score<60;
  • AVG():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的平均值
    eg:从学生表查询男生、女生、其他类型的学生的平均成绩
sql 复制代码
SELECT sex, AVG(score) avgScore FROM student GROUP BY sex;
  • MAX():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的最大值
    eg:从学生表查询学生的最大年龄
sql 复制代码
SELECT MAX(age) FROM student;
  • MIN():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的最小值
    eg:从学生表查询学生的最低分
sql 复制代码
SELECT MIN(score) FROM student;

2.3.3、分组查询结果筛选

sql 复制代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n] 
FROM 表名 WHERE 查询条件 GROUP BY 字段名1,字段名2,..., 字段名n HAVING 筛选条件

分组后如果还需要满足其他条件,则需要使用HAVING子句来完成。

eg:从学生表查询年龄在20~30之间的学生信息并按性别分组,找出组内平均分在80分以上的组

sql 复制代码
SELECT * FROM student WHERE age BETWEEN 20 AND 30 GROUP BY sex HAVING avg(score)>80;

2.4、排序

sql 复制代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n] 
FROM 表名 WHERE 查询条件 ORDER BY 字段名1 ASC|DESC,字段名2 ASC|DESC,..., 字段名n 
ASC|DESC

ORDER BY 必须位于WHERE 条件之后。

eg:从学生表查询年龄在18~30岁之间的学生信息并按成绩从高到低排列,如果成绩相同,则按年龄

从小到大排列

sql 复制代码
SELECT * FROM student WHERE age BETWEEN 18 AND 30 ORDER BY score DESC, age ASC;

2.5、分页

sql 复制代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n] 
FROM 表名 WHERE 查询条件 LIMIT 偏移量, 查询条数

LIMIT的第一个参数表示偏移量,也就是跳过的行数。

LIMIT的第二个参数表示查询返回的最大行数,可能没有给定的数量那么多行。

eg:从学生表分页查询成绩及格的学生信息,每页显示3条,查询第2页学生信息

sql 复制代码
SELECT * FROM student WHERE score>=60 LIMIT 3, 3;

注意 :如果一个查询中包含分组、排序和分页,那么它们之间必须按照分组->排序->分页的先后顺序排列。

相关推荐
iOS妖狐小北5 分钟前
mysql中主键索引和联合索引的原理解析
数据库·mysql
超级大只老咪5 分钟前
线性递推通用模板
java·开发语言·算法
coNh OOSI13 分钟前
Spring Boot问题总结
java·spring boot·后端
ISkp3V8b416 分钟前
基于项目工程构建SBOM(软件物料清单)的研究
java·visual studio
大嘴皮猴儿17 分钟前
AI图片翻译技术解析:以跨马翻译为例看电商图片翻译的实际效果
大数据·数据库·人工智能·自动翻译·教育电商
光泽雨17 分钟前
一、什么是 MySQL 函数?
mysql
郝学胜-神的一滴17 分钟前
「栈与缩点的艺术」二叉树前序序列化合法性判定:从脑筋急转弯到工程实现
java·开发语言·数据结构·c++·python·算法
她说..21 分钟前
Java Object类与String相关高频面试题
java·开发语言·jvm·spring boot·java-ee
FlDmr4i2824 分钟前
.NET 开发 MCP 服务器完全指南:打造智能数据库查询助手
服务器·数据库·.net
计算机学姐27 分钟前
基于SpringBoot的宠物店管理系统
java·vue.js·spring boot·后端·spring·java-ee·intellij-idea