MySQL-part2【MySQL表的增删改查】

目录

[一、新增 - Create](#一、新增 - Create)

(一)、语法

(二)、单行数据+全列插入

(三)、多行数据+指定列插入

[二、查询 - Retrieve](#二、查询 - Retrieve)

(一)、语法

(二)、全列查询

(三)、指定列查询

(四)、查询字段为表达式

(五)、别名

[(六)、去重 - distinct](#(六)、去重 - distinct)

[(七)、排序 - order by](#(七)、排序 - order by)

[(八)、条件查询 - where](#(八)、条件查询 - where)

1、比较运算符

(1)、>,>=,<.<=

(2)、=

(3)、<=>

[(4)、!=,<> 不等于](#(4)、!=,<> 不等于)

[(5)、berween A and B](#(5)、berween A and B)

(6)、in(option,...)

[(7)、is null、is not null](#(7)、is null、is not null)

(8)、like

2、逻辑运算符

(1)、and

(2)、or

[(九)、分页查询 - limit](#(九)、分页查询 - limit)

[1、从 0 开始,筛选 n 条结果](#1、从 0 开始,筛选 n 条结果)

[2、从 s 开始,筛选 n 条结果](#2、从 s 开始,筛选 n 条结果)

[3、从 s 开始,筛选 n 条结果](#3、从 s 开始,筛选 n 条结果)

[三、修改 - Update](#三、修改 - Update)

(一)、语法

[四、删除 - Delete](#四、删除 - Delete)

(一)、语法


增删改查也简称为CRUD

  • C - Create 新增
  • R - Retrieve 查询
  • U - Update 更新
  • D - Delete 删除

首先我们要明白增删改查操作的是哪一部分数据。

电脑上有一个数据库服务器 -> 管理着很多个数据库 -> 每一个数据库有很多数据表 -> 每张数据表中有很多数据行(记录)-> 每条数据行有很多列(字段)

而增删改查操作的是数据表中的数据行也就是记录。


一、新增 - Create

(一)、语法

insert into 表名 [(字段1[, 字段2] ...)] values ( 值[,值]...) [, 值[,值]...] ...

(二)、单行数据+全列插入

insert into 表名 [(字段1[, 字段2] ...)] values ( 值[,值]...);

在student表中插入一条数据

注意:前面的字段要和values的值要一一对应且数量相同。

如果values列表中的值与列的个数不匹配,会报一个错误

在全列插入时,可以不用再表名后指定列名,在values列表中按表中的定义字段的书安心设置相应的值

insert into 表名 values ( 值[,值]...);

(三)、多行数据+指定列插入

insert into 表名 [(指定列...)] values ( 值[,值]...) [, 值[,值]...] ...

在一条insert语句中,values部分可以用很多组values组,每一组表示要插入的一条数据行。

👧🏻:那么插入一条数据和插入多条数据哪一个效率高呢?

事实上来说在一个可控范围内,一次提交多条数据比一次提交一条数据效率高点。

👧🏻:如果在指定的name字段插入一条数据,那么id字段的值是什么呢?

id字段会用默认的值去填充,这个默认值为NULL。


二、查询 - Retrieve

(一)、语法

select [distinct] {* | {字段1[, 字段2] ...} from 表名
[where 条件] [order by 字段 [ASC | DESC]] limit n;

关键字:select:查询,distinct :去重,from,where,order by ,asc:升序,desc:降序,limit

(二)、全列查询

select * from 表名;


*号表示要查询表中所有的列

表名:表示要查询的是哪个表

对exam表进行全列查询:

(三)、指定列查询

select 列名 [,列名]... from 表名;

对exam表中的id,name,math三个字段进行查询:

(四)、查询字段为表达式

select 列名/表达式 from表名;

比如:1.表达式不包含字段

其中的10是数值类型,是让所有列中都包含一个表达式中的值,他本身并不存在exam表中。

2.表达式包含一个的字段 ------ 在chinese这一列的分数中加上10分:

3.表达式中包含多个字段 ------ 将chinese、math、english这三列进行相加:

(五)、别名

select 列名/表达式 [as] 别名 from 表名;

as可以省略,别名可以是任意的字符串

如果字符串中包含空格,字符串用单引号引起来。

在exam表中并没有总分这一列,而查询出的总分(表达式查询出来的结果集)是通过一个临时表返回给我们的,执行完之后临时表就删除了。

在MySQL中所有表达式查询结果都会通过临时表返回给用户。

给多个字段起别名:

(六)、去重 - distinct

select distinct 列名[,列名] [,列名]... from 表名;

当我们只查询math分数时,会发现里面含有重复的分数,但使用distinct关键字之后,里面重复的分数只保留一条

如果查询多个列,在去重时,所有列都相同才被判定为两条记录相同。

当查询结果中的所有列都相同才会认定为重复记录,才能去重成功。

(七)、排序 - order by

select 列名 from 表名 order by 列名/表达式/别名 asc|desc;


asc:升序 从小到大

desc:降序 从大到小

order by 查询结果中要根据我们指定的排序规则对结果进行排序

  1. 没有指定 order by 子句查询,返回的顺序是未定义的,永远不要依赖这个顺序。 默认MySQL根据哪个字段进行排序,是不确定的。

如果依赖某个排序规则,那么就明确指定order by子句中的排序字段。

对数学进行升序排序:

没有写排序规则的时候默认是升序排序,但还是建议明确指明排序规则


2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

在数值比较时,NULL被是为比任何数值都小。
3. 使用表达式 及 别名排序

使用表达式排序:

使用别名排序:

在查询结果中可以看到孙大圣的总分为NULL

这是因为NULL在MySQL中

  • 不论和什么值进行运算,返回的值都是NULL;
  • NULL始终被判定为false;
  • NULL的值不是我们以前学习过的其他编程语言中的0,在MySQL中就是NULL。
  1. 可以对多个字段进行排序,排序优先级与书写顺序有关

将chinese、math、english 这三个字段指定不同的排序规则:

(八)、条件查询 - where

条件查询根据指定的一些条件,过滤掉不符合条件记录,把符合条件的记录返回给用户。

使用的语法:select * from 表名 where 列名/表达式 运算符 条件;

1、比较运算符

|-----------------|-----------------------------------------|
| 运算符 | 说明 |
| >,>=,<.<= | 大于,大于等于,小于,小于等于 |
| = | 等于,null不安全,NULL=NULL,返回的结果是NULL |
| <=> | 等于,null安全, NULL<=>NULL,返回的结果是ture(1) |
| !=,<> | 不等于 |
| berween A and B | 范围匹配,[A,B] |
| in(option,...) | 如果是 option 中的任意一个,返回 TRUE(1) |
| is null | 是null |
| is not null | 不是null |
| like | 模糊匹配。 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字 符 |

(1)、>,>=,<.<=

①、查询english< 90:

结果集中会自动过滤了值为null的列

②、比较math和english两列:

注意:一行数据中的两个列是可以进行比较的,但是不能跨行进行比较。

③、查询chinese、math、english相加的总分 < 200的数据:

当在where条件中使用别名是:

显示在 WHERE 子句中,找不到名为 total 的列,这是于MySQL语句顺序有关

在表中查询数据时,MySQL语句顺序:

  • 先确定表,先执行from;
  • 然后根据where指定的查询条件把符合条件的数据过滤出来,执行的是where语句;
  • 其次执行select后面的指定列,这些列是需要加入到最终的结果集中;
  • 最后,根据order by子句中指定的列按照排序规则进行排序

在where条件中要使用完整的表达式,不能使用别名。

(2)、=

在MySQL中判断相等时用的是 = ,赋值时也是 = 。

NULL和NULL进行比较时,返回的结果是NULL

(3)、<=>

<=> 专门对NULL来做判断

(4)、!=,<> 不等于
(5)、berween A and B
(6)、in(option,...)

如果是 option 中的任意一个,返回 TRUE(1),否则是false

(7)、is null、is not null
(8)、like

模糊匹配。 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符

一个_相当于一个占位符,有几个_必须匹配几个字符。

2、逻辑运算符

|-----|--------------------------------|
| 运算符 | 说明 |
| and | 多个条件必须都为 TRUE(1) ,结果才是 TRUE(1) |
| or | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
| not | 条件为 TRUE(1) ,结果为 FALSE(0) |

(1)、and

查询chinese > 60 并且 math >80的数据:

(2)、or

查询chinese > 60 或者 math >80的数据

优先级:not > and > or

(九)、分页查询 - limit

limit 限制查询结果集的条数

1、从 0 开始,筛选 n 条结果

select * from 表名[where 条件] [order by 列名 asc|desc] limit n;

2、从 s 开始,筛选 n 条结果

select * from 表名 [where 条件] [order by 列名 asc|desc] limit s n;

3、从 s 开始,筛选 n 条结果

select * from 表名 [where 条件] [order by 列名 asc|desc] limit n offset s;


三、修改 - Update

(一)、语法

update 表名 set 列名 = 值 [,列名 = 值] [,列名 = 值]... where 条件 order by 列名 asc|desc limit n;

where 条件在修改时必须加上,否则表中所有的记录都被更新。

对某一名学生的数学成绩修改成90:

只要找到符合的条件记录,就会一次性把符合的记录全部都修改。


四、删除 - Delete

(一)、语法

delete from 表名 where 条件 order by 列名 asc|desc limit n;

where 条件在修改时必须加上,否则表中所有的记录都被删除。

删除某一位学生的记录:

在这篇文章中,讲了对表进行新增、查询、更新、删除的操作,其中查询有全列查询、指定列查询、条件查询、区间查询、模糊查询、分页查询等等。

相关推荐
white-persist2 小时前
【vulhub weblogic CVE-2017-10271漏洞复现】vulhub weblogic CVE-2017-10271漏洞复现详细解析
java·运维·服务器·网络·数据库·算法·安全
sR916Mecz2 小时前
MongoDB 详解、应用场景及案例分析(AI)
数据库·mongodb
执笔画流年呀2 小时前
如何用Navicat来创建表
java·mysql
sR916Mecz2 小时前
pache Hop实战:Windows平台MySQL数据迁移的深度排错与性能调优
数据库·windows·mysql
taWSw5OjU2 小时前
MyBatis-plus进阶之映射与条件构造器
数据库·oracle·mybatis
诗人不写诗3 小时前
spring boot apm生态
java·数据库·spring boot
火飞鹰4 小时前
封装MinIO为starter
java·数据库·spring boot
升职佳兴5 小时前
SQL 进阶3:连续登录问题与 ROW_NUMBER 差值法完整解析
java·数据库·sql