第四章 表的增删改查

我们在前面两章介绍的是库和表的创建与更改。那么本章节讲解的则是当我们创建好库和表以后,如何向表中插入数据、更改数据、删除数据与查询数据。

一、create(增)

我们先创建一张学生表。
在这里插入图片描述
这张表中有三个变量,学生的学号(id),学生的姓名(name),学生的邮箱(email)。

1、单行数据+全列插入

(1)语法

insert into 表的名称 values (变量1的值,变量2的值...);

(2)示例

在这里插入图片描述

2、多行数据+全列插入

(1)语法

insert into 表的名称 values (变量1的值,变量2的值...),(变量1的值,变量2的值...),(变量1的值,变量2的值...)....;

(2)示例

在这里插入图片描述

3、指定列插入

(1)语法

insert into 表的名称(变量1,变量2...) values (变量1的值,变量2的值...),(变量1的值,变量2的值...)...;

(2)示例

在这里插入图片描述

4、更新已插入数据

我们在插入数据的时候,往往由于主键或者唯一键对应的值已经存在而导致插入失败。此时,我们可以通过一些语法操作,让我们的插入更新已存在的数据。

(1)语法

在插入数据的语句后方加上:on duplicate key update 变量1 = 更新值1, 变量2 = 更新值2....;

(2)示例

在这里插入图片描述
当我们输入插入语句后,如果插入成功的话,mysql会给我们反馈,即Query OK, 2 rows affected (0.08 sec)。那么这里几行被更新,其实能反馈出我们的数据是冲突后更新,还是直接插入。

-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新

5、替换数据

这里要分成两类来讨论。如果说我们插入的数据与主键和唯一键没有冲突,则直接插入数据。如果说我们的插入的数据与主键和唯一键发生了冲突,则将原来数据删除后再插入。

(1)语法

replace into 表的名称 (变量1,变量2...) values (变量值1,变量值2...);

(2)内容

在这里插入图片描述
其中:

-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,删除后重新插入

二、Retrieve(查询)

1、select

(1)全列查询

select * from 表的名称;

在这里插入图片描述

(2)指定列查询

select 变量1,变量2... from 表的名称;

在这里插入图片描述

(3)表达式作为查询列

select 变量1,变量2...表达式1,表达式2... from 表的名称;

在这里插入图片描述

(4)为查询结果指定别名

select 变量1 别名1,变量2 别名2...from 表的名称;

在这里插入图片描述

(5)结果去重

select distinct 变量1,变量2.... from 表的名称;

在这里插入图片描述

2、where

在介绍where语句之前,我们再创建一个成绩表并插入一些数据,语句如下:
创建表:

create table exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);

插入数据:

insert into exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30);

(1)运算符

比较运算符

在这里插入图片描述

逻辑运算符

在这里插入图片描述

(2)where用途

where的后面往往跟随某些条件语句,从而筛选出满足条件的特定数据。

(3)语法

select * from 表的名称 where 数据满足的条件;

(4)示例

英语不及格的同学及英语成绩 ( < 60 )

select * from exam_result where english < 60;

在这里插入图片描述

语文成绩在 [80, 90] 分的同学及语文成绩

方法1:
 select * from exam_result where chinese >= 80 and chinese <= 90;
 方法2:
 select * from exam_result where chinese between 80 and 90;

在这里插入图片描述
在这里插入图片描述

数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

方法1:
select * from exam_result where math = 58 or math = 59 or math = 98 or math = 99;
方法2:
select * from exam_result where math in (58, 59, 98, 99);

在这里插入图片描述

姓孙的同学

select * from exam_result where name like '孙%';

在这里插入图片描述

孙某同学

select * from exam_result where name like '孙_';

在这里插入图片描述

总分在 200 分以下的同学

select name, chinese+math+english 总分 from exam_result where chinese+math+english < 200;

在这里插入图片描述

NULL 的查询

这里用到的是之前创建的stu表。

select * from stu where email is not null;

在这里插入图片描述

select * from stu where email is null;

在这里插入图片描述

3、结果排序

(1)语法

升序排序

select * from 表的名称 order by 变量名(或者表达式) asc

降序排序

select * from 表的名称 order by 变量名(或者表达式) desc

如果我们不写asc或者desc的话,mysql默认升序。

(2)示例

select * from exam_result order by chinese asc;

在这里插入图片描述

select name 姓名, chinese+math+english 总分 from exam_result order by chinese+math+english desc;

在这里插入图片描述

4、筛选分页结果

(1)语法

  • 从0 开始,筛选n 条结果
select 语句后面加 limit n;
  • 从 s 开始,筛选 n 条结果
select 语句后面加 limit s, n;
  • 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
select 语句后面加 limit n offset s;

(2)示例

筛选出总分排名第一的学生。
在这里插入图片描述

三、Update(更新/修改)

1、语法

update 表的名称 set 变量1=更新值1,变量2=更新值2... [where...] [order by...] [limit ..]

[ ]中括号内为可选的选项。

如果我们后面对数据不做任何筛选,则该语句会对全表进行数据更新。

2、示例

将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
在这里插入图片描述

四、Delete(删除)

1、delete

(1)语法

delete from 表的名称 [where...] [order by...] [limit...];

[]中括号内为可选选项。如果我们不加任何条件,该语句会删除整个表的数据。

(2)示例

删除孙悟空同学的考试成绩
在这里插入图片描述

2、truncate

(1)语法

truncate 表的名称;

(2)truncate 与 delete的区别

  • delete可以对筛选后的特定数据进行删除,但是truncate只能删除整个表。

  • delete不会重置auto_increment的值,但是truncate会重置auto_increment

(3)示例

我们在这里证明一下第点:是否重置auto_increment。

证明之前,我们先创建一个只有id变量的表T。如下:
在这里插入图片描述
然后插入多个数据:
在这里插入图片描述

我们先看delete语句:
先用delete删除整个表的数据。
在这里插入图片描述
然后我们插入一个数据,看看系统默认补充的数值是多少。
在这里插入图片描述
我们发现默认插入的是4,而不是1。
我们还可以通过查看创建表时候的语句来检查自增长的数值。
在这里插入图片描述
这里本来应该显示4,但是我们在删除以后,又插入了一个数,所以这里显示的是5。

接着我们看truncate语句:

我们再创建一个表T2,这个表中还是只有一个自增长的变量id。
在这里插入图片描述
然后我们用truncate语句删除这个表。
在这里插入图片描述
接着我们删除这个表,然后再插入一个空的数据,看看自增长会为该数据赋值为什么?

在这里插入图片描述
此时插入的是1,说明truncate的确重置了自增长属性。

五、插入查询结果

我们可以用insert语句插入数据,同时我们还可以用select查询数据。那么我们能不能将查询的数据进行插入呢?
答案是可以的。

1、语法

insert into 表的名称[变量1,变量2....] select ...

2、示例

先创建一个普通的表T3。
在这里插入图片描述
然后,插入几组数据。
在这里插入图片描述
接着我们将1再次插入。
在这里插入图片描述
查询一下我们是否成功插入:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_72060925/article/details/131830299
今日推荐