第四章 表的增删改查

第四章 表的增删改查

  • 一、create(增)
    • 1、单行数据+全列插入
      • (1)语法
      • (2)示例
    • 2、多行数据+全列插入
      • (1)语法
      • (2)示例
    • 3、指定列插入
      • (1)语法
      • (2)示例
    • 4、更新已插入数据
      • (1)语法
      • (2)示例
    • 5、替换数据
      • (1)语法
      • (2)内容
  • 二、Retrieve(查询)
    • 1、select
      • (1)全列查询
      • (2)指定列查询
      • (3)表达式作为查询列
      • (4)为查询结果指定别名
      • (5)结果去重
    • 2、where
      • (1)运算符
        • 比较运算符
        • 逻辑运算符
      • (2)where用途
      • (3)语法
      • (4)示例
        • 英语不及格的同学及英语成绩 ( < 60 )
        • 语文成绩在 [80, 90] 分的同学及语文成绩
        • 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
        • 姓孙的同学
        • 孙某同学
        • 总分在 200 分以下的同学
        • NULL 的查询
    • 3、结果排序
      • (1)语法
      • (2)示例
    • 4、筛选分页结果
      • (1)语法
      • (2)示例
  • 三、Update(更新/修改)
    • 1、语法
    • 2、示例
  • 四、Delete(删除)
    • 1、delete
      • (1)语法
      • (2)示例
    • 2、truncate
      • (1)语法
      • (2)truncate 与 delete的区别
      • (3)示例
  • 五、插入查询结果
    • 1、语法
    • 2、示例

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

一、create(增)

我们先创建一张学生表。
第四章 表的增删改查_第1张图片
这张表中有三个变量,学生的学号(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张图片

(2)指定列查询

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

第四章 表的增删改查_第3张图片

(3)表达式作为查询列

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

第四章 表的增删改查_第4张图片

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

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

第四章 表的增删改查_第5张图片

(5)结果去重

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

第四章 表的增删改查_第6张图片

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)运算符

比较运算符

第四章 表的增删改查_第7张图片

逻辑运算符

第四章 表的增删改查_第8张图片

(2)where用途

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

(3)语法

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

(4)示例

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

select * from exam_result where english < 60;

第四章 表的增删改查_第9张图片

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

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

第四章 表的增删改查_第10张图片
第四章 表的增删改查_第11张图片

数学成绩是 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);

第四章 表的增删改查_第12张图片

姓孙的同学

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

第四章 表的增删改查_第13张图片

孙某同学

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

第四章 表的增删改查_第14张图片

总分在 200 分以下的同学

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

第四章 表的增删改查_第15张图片

NULL 的查询

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

select * from stu where email is not null;

第四章 表的增删改查_第16张图片

select * from stu where email is null;

第四章 表的增删改查_第17张图片

3、结果排序

(1)语法

升序排序

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

降序排序

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

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

(2)示例

select * from exam_result order by chinese asc;

第四章 表的增删改查_第18张图片

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

第四章 表的增删改查_第19张图片

4、筛选分页结果

(1)语法

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

(2)示例

筛选出总分排名第一的学生。
第四章 表的增删改查_第20张图片

三、Update(更新/修改)

1、语法

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

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

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

2、示例

将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
第四章 表的增删改查_第21张图片

四、Delete(删除)

1、delete

(1)语法

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

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

(2)示例

删除孙悟空同学的考试成绩
第四章 表的增删改查_第22张图片

2、truncate

(1)语法

truncate 表的名称;

(2)truncate 与 delete的区别

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

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

(3)示例

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

证明之前,我们先创建一个只有id变量的表T。如下:
第四章 表的增删改查_第23张图片
然后插入多个数据:
第四章 表的增删改查_第24张图片

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

接着我们看truncate语句:

我们再创建一个表T2,这个表中还是只有一个自增长的变量id。
第四章 表的增删改查_第28张图片
然后我们用truncate语句删除这个表。
第四章 表的增删改查_第29张图片
接着我们删除这个表,然后再插入一个空的数据,看看自增长会为该数据赋值为什么?

第四章 表的增删改查_第30张图片
此时插入的是1,说明truncate的确重置了自增长属性。

五、插入查询结果

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

1、语法

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

2、示例

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

你可能感兴趣的:(MySQL,数据库,mysql)