C++ MySQL day3 数据的增删改查
4.25
1.DML--插入语句
2.DML--修改语句
3.DML--删除语句
4.DQL -- 查询语句
5.聚合函数
6.分组查询
7.查询排序
8.分页查询
一.DML语句
1.什么是DML
DML全称为Data Manipulation Language,表示数据操作语言。主要体现于对数据的增删改操作。因此DML仅包括INSERT、UPDATE和DELEETE语句。
2.insert语句
基本语法
点击查看代码
-- 需要注意,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);
实例:向课程表中插入数据
点击查看代码
INSERT INTO course(`number`, name, score, `time`) VALUES (1, 'Java基础', 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);
3.update语句
基本语法
点击查看代码
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2, ..., 字段名n=字段值n] [WHERE 修改条件]
3.1where条件子句
在C++中,条件的表示通常都是使用关系运算符来表示,在SQL语句中也是一样,使用 >, <, >=, <=, != 来表示。
不同的是,除此之外,SQL中还可使用SQL专用的关键字来表示条件。这将在后面的DQL语句中详细讲解。
在C++中,条件之间的衔接通常都是使用逻辑运算符来表示,在SQL语句中也是一样,但通常使用AND来表示逻辑与(&&),使用OR来表示逻辑或(||)
实例:
点击查看代码
WHERE time > 20 && time < 40;//C++风格
WHERE time > 20 and time <40;//MYSQL风格
3.2update语句
实例:将数据库的学分更改为4,学时更改为15
点击查看代码
UPDATE course SET score=4, `time`=15 WHERE name='数据库';
4.delete语句
基本语法
点击查看代码
DELETE FROM 表名 [WHERE 删除条件];
实例:删除课程表中课程编号为1的数据
点击查看代码
DELETE FROM course WHERE `number`=1;
5.truncate语句
点击查看代码
-- 清空表中数据
TRUNCATE [TABLE] 表名;
实例:
点击查看代码
TRUNCATE course;
6.DELETE与TRUNCATE区别
1.DELETE语句根据条件删除表中数据,而TRUNCATE语句则是将表中数据全部清空;如果DELETE语
句要删除表中所有数据,那么在效率上要低于TRUNCATE语句。
2.如果表中有自增长列,TRUNCATE语句会重置自增长的计数器,但DELETE语句不会。
3.TRUNCATE语句执行后,数据无法恢复,而DELETE语句执行后,可以使用事务回滚进行恢复。
二.DQL语句
1.什么是DQL语句
DQL全称是Data Query Language,表示数据查询语言。体现在数据的查询操作上,因此,DQL仅包括SELECT语句。
- SELECT语句
基本语法
点击查看代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n]FROM 表名 WHERE 查询条件
解释说明:
1.ALL表示查询所有满足条件的记录,可以省略;
2.DISTINCT表示去掉查询结果中重复的记录
3.AS可以给数据列、数据表取一个别名
实例:从课程表中查询课程编号小于5的课程名称
点击查看代码
SELECT name FROM course WHERE `number`<5;
实例:从课程表中查询课程名称为"Java基础"的学分和学时
点击查看代码
SELECT score, `time` FROM course WHERE name='Java基础';
3.比较操作符

实例:从课程表查询课程名为NULL的课程信息
点击查看代码
SELECT * FROM course WHERE name IS NULL;
实例:从课程表查询课程名不为NULL的课程信息
点击查看代码
SELECT * FROM course WHERE name IS NOT NULL;
实例:从课程表查询学分在2~4之间的课程信
点击查看代码
SELECT * FROM course WHERE score BETWEEN 2 AND 4;
实例:从课程表查询课程名包含"V"的课程信息
点击查看代码
SELECT * FROM course WHERE name LIKE '%v%';
实例:从课程表查询课程名以"J"开头的课程信息
点击查看代码
SELECT * FROM course WHERE name LIKE 'J%';
实例:从课程表查询课程名以"p"结尾的课程信息
点击查看代码
SELECT * FROM course WHERE name LIKE '%p';
实例:从课程表查询课程编号为1,3,5的课程信息
点击查看代码
SELECT * FROM course WHERE `number` IN (1, 3, 5);
4.分组:
4.1分组查询
基本语法:
点击查看代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n]FROM 表名 WHERE 查询条件 GROUP BY 字段名1,字段名2,..., 字段名n
分组查询所得的结果只是该组中的第一条数据
示例:从学生表查询成绩在80分以上的学生信息并按性别分组
点击查看代码
SELECT * FROM student WHERE score>80 GROUP BY sex;
示例:从学生表查询成绩在60~80之间的学生信息并按性别和年龄分组
点击查看代码
SELECT * FROM student WHERE score BETWEEN 60 AND 80 GROUP BY sex, age;
4.2聚合函数
1.count():统计满足条件的数据总条数
实例:从学生表查询成绩在80分以上的学生人数
点击查看代码
SELECT COUNT(*) total FROM student WHERE score>80;
2.SUM():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的总和
示例:从学生表查询不及格的学生人数和总成绩
点击查看代码
SELECT COUNT(*) totalCount, SUM(score) totalScore FROM student WHERE
score<60;
3.AVG():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的平均值
示例:从学生表查询男生、女生、其他类型的学生的平均成绩
点击查看代码
SELECT MAX(age) FROM student;
4.MAX():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的最大值
示例:从学生表查询学生的最大年龄
点击查看代码
SELECT MAX(age) FROM student;
5.MIN():只能用于数值类型的字段或者表达式,计算该满足条件的字段值的最小值
示例:从学生表查询学生的最低分
点击查看代码
SELECT MIN(score) FROM student;
4.3 分组查询结果筛选
点击查看代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n]
FROM 表名 WHERE 查询条件 GROUP BY 字段名1,字段名2,..., 字段名n HAVING 筛选条件
分组后如果还需要满足其他条件,则需要使用HAVING子句来完成。
示例:从学生表查询年龄在20~30之间的学生信息并按性别分组,找出组内平均分在74分以上的组
点击查看代码
SELECT * FROM student WHERE age BETWEEN 20 AND 30 GROUP BY sex HAVINGavg(score)>74;
点击查看代码
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
点击查看代码
SELECT * FROM student WHERE age BETWEEN 18 AND 30 ORDER BY score DESC, age ASC;
- 分页
基本语法:
点击查看代码
SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n]
FROM 表名 WHERE 查询条件 LIMIT 偏移量, 查询条数
点击查看代码
SELECT * FROM student WHERE score>=60 LIMIT 3, 3;

浙公网安备 33010602011771号