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;

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

相关推荐
Villiam_AY2 小时前
一次 DNS 端口引发的代理网络和公司内网冲突问题
java·服务器·数据库
dgvri2 小时前
比较Spring AOP和AspectJ
java
eggwyw2 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
韩立学长2 小时前
Springboot奶茶加盟信息管理系统m307m786(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
2401_844221322 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
zhangyueping83852 小时前
9、MYSQL-存储过程
数据库·mysql
Arya_aa2 小时前
Mysql数据库-管理和存储数据库(开源管理系统)与JDBC操作数据库步骤,JUnit以及如何将压缩包中exe程序添加上桌面图标
数据库·mysql·junit·开源
于先生吖3 小时前
国际版JAVA婚恋交友系统源码:多语言适配,可商用的跨境婚恋解决方案
java·大数据·交友