MySQL表数据的增删查改

目录

表数据的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、付费专栏及课程。

余额充值