MySQL表数据的增删查改

本文详细介绍了MySQL中表数据的创建、读取、更新和删除(CRUD)操作,包括单行多行插入、查询条件、排序、分页以及更新和删除数据的语法和实例。重点讨论了WHERE子句在条件查询中的应用,如区间、包含、模糊和NULL值处理。此外,还提到了ORDER BY和LIMIT在查询优化中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

表数据的CURD

1.新增数据

1) 单行插入

2) 单行全列插入

3) 多行某几列插入

4) 多行全列插入

2. 查询数据

全列全行查找

1) 查找指定列

2) 查询字段为表达式

3) 给查询结果起别名

4) 去重查询得到去重处理后的结果distinct

5) 按照结果集排序 order by 可以使用别名

6) 分页查询 limit

7) ****条件查询****where语句(重点)

7.1) 查询所有总成绩>200的同学姓名和他们的总成绩

7.2) where分支中不支持别名

7.3) MySQL的null不包含在 <  <= 的条件中,null = null也不支持

7.4) 区间查询: between...and...

7.5) 包含查询in

7.6) 模糊查询 like

3. 修改表数据

1) 修改一行—列

2) 修改一行多列

3) 修改多行数据

4) 若update语句不带where条件,则该属性的所有行都受影响

4. 删除表数据

1) 删除名字叫空的这一条学生记录

2) 若此时不加where条件,则全表删除

全表删除


表数据的CURD

CURD(Create Update Retrieve Delete)

对于表中数据的增删改查在每—行上进行操作~

1.新增数据

insert into tb_name(属性名称...) values(属性值...);

1) 单行插入


2) 单行全列插入

在插入时表名之后没有指定列名,默认为需要单行全列插入

注意:若列有三列,values括号中只有两个数据,此时全列插入会报错。

全列插入数据个数必须严格等于列的个数,否则报错,不会使用null占位。

正确写法


3) 多行某几列插入


4) 多行全列插入

2. 查询数据

ExamResult根据名称映射
MySQL中表、数据库、属性名称,统一使用全小写+下划线分隔,不要使用驼峰名称。


全列全行查找

select * from tb_name;


1) 查找指定列

select 列名称 from tb_name;

select得到的数据,以二维表格的形式展示数据。这个表格是一张临时表,不会存储到具体的硬盘中。


2) 查询字段为表达式

a. 查询所有(学生姓名,语文成绩+10)的结果,此时不会真的给数据+10,只在当前展示有效。

b. 查询学生姓名以及总成绩


3) 给查询结果起别名

刚才结果直接以表达式展示的,不美观,意义不明确,可以给查询结果起别名~

select 列名 as 新名词 from tb_name;


4) 去重查询得到去重处理后的结果distinct

select distinct 列名称 from tb_name;

若要查询多列结果,包含distinct关键字的话,去重查询必须放在第一列,且后面属性默认也会进行去重处理。

select dinstinct 列名称1,列名称2 from tb_name; // 组合属性去重


5) 按照结果集排序 order by 可以使用别名

select 列名称 from tb_name;
         order by 列名称[asc|desc];

默认为升序排序,asc不写的话默认升序。
a. 查询所有学生的姓名和他们的总成绩,按照总成绩升序排序。

b. 按照总成绩降序排序。

c. 若此时结果集中包含null值,这个值null认为是最小值

d. 针对多个列进行的排序?

查询所有学生的姓名,语文成绩,数学成绩,其中按照语文成绩升序,数学成绩降序排序。

按照书写顺序优先级排序


优先按照语文成绩升序排序,只有两个语文成绩相同的数据才按照数学降序排序。


6) 分页查询 limit

select 属性名称 from tb_name limit n; //查询结果按照前n行输出

查询总成绩前三名同学的姓名以及总成绩多少

select 属性名称 from tb_name limit n offset s; // 查询结果按照前n行输出

从第s+1行开始查询(s...s + n]

总成绩在4-5行的同学姓名和他们的总成绩


若 limit n >所有行数,则全部展示。


当前表只有5行(最高索引为4),令其offset 5,从索引为5开始展示,输出为Empty set(结果为空)。当前数据表就不存在从第6行开始之后的三行数据。

7) ****条件查询****where语句(重点)

7.1) 查询所有总成绩>200的同学姓名和他们的总成绩


7.2) where分支中不支持别名

为什么order by支持别名而where不支持?
order by的执行顺序,是在已经把结果查出来后,只是给查出来的结果排序。(select查询出来的结果对于order by已经可见了)。
where执行顺序是在查询之前,叫条件过滤。select是先要满足where分支的条件基础上的查询!select的别名这个时候还没执行。


7.3) MySQL的null不包含在 <  <= 的条件中,null = null也不支持

null不要使用 < <= = 去比较,我们有专门的运算符过滤 null值

现在的表为


a. 过滤所有总成绩 < 200的同学姓名

结果不包含null

b. 过滤所有成绩非空的同学和他们的总成绩is not null

c. Null +任何数据都是Null


Null本身就是一个没有任何实际数值的值

练习:查询语文成绩优于英语成绩的同学姓名


7.4) 区间查询: between...and...

查询语文成绩在[85...100]之间的同学姓名和他们的语文成绩

单独使用and也可以实现


7.5) 包含查询in

查询数学成绩是20或60或99分的同学姓名和他们的数学成绩


7.6) 模糊查询 like

%元素[0...n]
a. 查询所有名字中带号的学生姓名

_严格匹配一个字符

现在的表


b. 查询所有名字中“号”字出现在第2个位置且名字由4个字符组成的学生姓名

 

3. 修改表数据

update 表名 set 属性名 where 受影响的行
update表名set列名=(表达式-根据这个表达式确定修改的行)

1) 修改一行一列

成绩表中一号同学的数学成绩+10分
update exam_result set math = math + 10 where name = '1号';


2) 修改一行多列

成绩表中2号同学的数学和英语成绩+5分
update exam_result set math = math + 5,english = english + 5 where name = '2号';


3) 修改多行数据

where过滤出来的结果是多行

成绩表中所有名字中带号的同学数学成绩-10分。
update exam_result set math = math - 10 where name like '%号%';

符合条件的有7行,修改的行数 6,null不能进行数学运算


4) 若update语句不带where条件,则该属性的所有行都受影响

重置学生表,将所有同学的数学成绩都还原为0

update exam_result set math = 0;

4. 删除表数据

delete from 表名 where 过滤条件;

1) 删除名字叫空的这一条学生记录

delete from exam_result where name = '空'; 


2) 若此时不加where条件,则全表删除

delete from exam_result;

删除之后会告诉你删除的行数。一行行执行delete操作。

delete删除慢,可恢复,可以加条件。


全表删除

truncate table 表名
truncate table exam_ret;

相当于在os上直接把数据文件的大小变成0。将所有表中数据清除,不显示受影响的行数。
turncate删除快,数据不可恢复,不能加条件。

注意:以上表的删除只是将表中数据删除,而drop表相当于直接把操作系统上这个文件删了,表都没了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瘦皮猴117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值