操作数据是数据库很重要的一部分,今天整理了下关于MySQL数据库数据的增删改查,包括基础查询、where条件查询、排序、分页、聚合、分组、having以及多表查询,多表查询的直接查询、内连接、外连接以及子查询。方便自己以后查看,也欢迎正在学习MySQL数据库的同学参考,谢谢。 数据库的安装配置点这里
目录
1. MySQL数据的增删改
1.1 数据表新增 数据
1.2 删除数据
1.3 更新数据
2.数据的查询操作
2.1基础查询
2.2 where条件查询
2.3 排序查询
2.4 分页查询
2.5 聚合查询
2.6 分组查询
2.7 having查询
2.8 多表查询
2.8.1 直接查询
2.8.2 内连接查询
2.8.3 外连接查询
2.8.4 union查询
2.8.5 子查询
1. MySQL数据的增删改
1.1 数据表新增 数据
--给数据表新增一条数据
insert into user (usrename) values ('rose');
insert into user (usrename,gender) values ('rose','女性');
--数据表插入多条数据
insert into user (usrename,gender) values ('rose','女性'),('jack','保密');
1.2 删除数据
--删除数据
delete from user; --删除是整张表
delete from user where id = 3; --删除符合条件的指定数据
1.3 更新数据
我们更新user数据表中id为1的数据username字段被更新为 新的数据苏妲己。
--更新数据 更新符合条件的数据
update user set usrename='苏妲己', gender = '女性' where id = 1;
2.数据的查询操作
数据的查询操作内容比较多,常用的基础查询、where条件查询、排序查询、分页查询、聚合函数、分组查询、having查询以及多表查询。我们新建了一张学生信息表来查询数据使用。
2.1基础查询
通过查询语句查询的结果称为结果集,是以表的形式呈现的,结果集来自数据表,但不是一张表,结果集保存在内存,而数据表保存在硬盘上。
--基础查询
select * from student; -- 查询所有字段
select id,name from student; -- 查询指定字段
2.2 where条件查询
-- 支持 >、 <、 >=、 <= 、 =、 !=
-- 支持 and 与、or或、not 非
-- in(值1,值2) between...and
-- is null、 is not null
-- like 模糊查询
-- =可以换成>、 <、 >=、 <= 、 !=
select * from student where id = 2;
-- 并且 两个条件同时满足
select * from student where age >=18 and gender ='女生';
-- 满足其中一个条件
select * from student where age >=18 or gender ='女生';
-- 年龄不小于16的数据
select * from student where not age <18;
-- id限制某个范围
select * from student where id in (1,2,5);
-- 查询在范围内,包含边界
select * from student where id between 1 and 5;
-- class 是null的数据
select * from student where class is null;
-- class 不是null的数据
select * from student where class is not null;
-- %匹配任意个任意字符
select * from student where name like '张%';
-- %匹配任意个任意字符
select * from student where name like '%三%';
-- %匹配任意个任意字符
select * from student where name like '%三';
-- _匹配一个任意字符
select * from student where name like '张_';
2.3 排序查询
指定某些字段按照升序,还是降序的方式展示数据集。不设置的情况下数据查询结果默认是升序排列的。
-- 排序查询
-- 默认就是升序 英文 ascending
select * from student order by age asc;
-- 降序 descending
select * from student order by age desc;
-- 先按年龄降序,再按id 升序
select * from student order by age desc, id asc;
2.4 分页查询
-- limit 一次查询的条数 offset偏移量
-- limit 偏移量 一次查询的条数
select * from student limit 3 offset 2;
-- 等同于下面这种写法
select * from student limit 2,3;
2.5 聚合查询
聚合查询就是对表中的数据进行计算和统计,一般结合分组(group by)来使用,用于统计和计算分组数据。常用的聚合函数有 count() sum() avg() min() max()
-- count() 计算查询结果集中数据条数的 (一般用于统计数据条数)
-- sun() 计算结果集中所有指定字段的和 (相当于某个字段的求和)
-- avg() 计算结果集中所有指定字段的平均和 (相当于某个数据的平均数)
-- max() 求查询结果中指定字段的最大值
-- min() 求查询结果中指定字段的最小值
select count(*) from student;
select sum(age) from student;
select avg(age) from student;
select max(age) from student;
select min(age) from student;
-- 给聚合函数查出来的字段设置别名
select count(*) as total from student;
select count(*) total from student; -- as 也可以省略
select count(*) '总数' from student; --设置中文别名
2.6 分组查询
对数据表中的需要分组的字段进行分组显示结果集,查询语句select 后跟分组字段或者聚合函数
select class from student group by class;
select class,avg(age) from student group by class;
select class,avg(age) '平均年龄' from student group by class;
2.7 having查询
having查询是对数据集中的数据进行查询,可对分组数据进行筛选。
where虽然也是条件查询,但是where是对数据进行查询。having是对数据集进行筛选。
-- select class,avg(age) avg from student group by class where avg <= 18; -- 不可这样写
select class,avg(age) avg from student group by class having avg <= 18;
2.8 多表查询
多表查询是指多个表之间关联查询数据。有直接查询、内连接查询、左外连接查询、右外连接查询、union查询、子查询。
2.8.1 直接查询
select * from class,student1;
select * from class,student1 where class.id = student1.class_id;
2.8.2 内连接查询
内连接查询 inner join 或 join
-- 内连接查询 inner join 或 join
-- 内连接查询和直接查询出来的数据一样
select a.id,b.name from student1 a join class b on a.class_id = b.id;
2.8.3 外连接查询
左外连接 left outer join 或者 left join 和右外连接查询 right outer join 或者 right join
-- left outer join 或者 left join
-- 左外连接查询 就是左边的表无条件显示,而右边表符合条件的数据才会显示
select * from student1 a left join class b on a.class_id = b.id;
-- right outer join 或者 right join
-- 右外连接查询 就是右边的表无条件显示,而左边表符合条件的数据才会显示
select * from student1 a left join class b on a.class_id = b.id;
2.8.4 union查询
union查询的两张表查询的字段需要保持一致。
-- union查询
select id,name from student1 union select id,name from class;
2.8.5 子查询
子查询是把一条查询语句查询的结果当作 查询条件 或者 数据表 来使用。作为数据表来用需要设置别名。
-- 1.子查询
-- 1.1 将查询语句作为另一个查询语句的条件来使用
select class_id from student1 where id = 1;
select class_id from student1 where id > 1;
select * from class where id = (select class_id from student1 where id = 1);
select * from class where id in (select class_id from student1 where id > 1);
-- 1.2 将查询语句结果做为另一个查询语句的表来使用
select name from class where id > 1;
select * from (select name from class where id > 1) a; -- 必须给子查询设置别名
数据的查询操作到这里就介绍完了。有问题欢迎大家评论区留言,谢谢。
前面我们已经写过数据库以及数据表的增删改查以及主键约束、外键约束、非空约束等。需要参考这部分知识的同学请自从查看:MySQL数据库入门基础知识 【1】推荐-CSDN博客
有关MySQL数据库外键默认约束和外键操作的restrict严格模式、set null置空操作、cascade级联操作的基础知识请参考:MySQL数据库 外键默认约束和action 基础知识【2】推荐-CSDN博客