MYSQL ---CURD

(一).CURD

CURD,即**增加(Create)删除(Delete)更新(Update)查找(Select)**四个单词的缩写。

也就是我们常说的,增删改查

(二).增

1.语法

insert into table_name [(字段1,字段2······)] values (值,值);

insert into 表示"插入一条数据行"

(字段1,字段2) 表示"定义表时的字段名,可以是多个也可以是一个"

values 表示"值"

(值,值) 表示"按照前面字段名的顺序,设置对应的值"

注意:[ ]部分可以省略,如果省略的话,就需要在插入values值的时候按顺序插入。

2.演示

这里以我创建的学生表来示范

(1).单行数据+全列插入

当不按照顺序插入的时候,就会报错

插入完成以后,如果我们想要看一下插入的是否正确,我们可以使用 **select * from student;**命令来查看我们刚才插入的数据是否正确,这个命令会在介绍查询的时候介绍到,这里我们可以先使用

通过上面的图片,我们可以看到,我们刚才的插入是正确的。

(2).指定列插入

我们可以指定列进行插入操作

(3).多行插入

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

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

(4).一次插入一条数据和一次插入多条数据哪个效率高?

答:还是一次插入多条数据效率高一点

①.执行所有的SQL时都有网络开销(这是一个不可控的因素)。

②.写入数据时还会有磁盘的IO的开销。

③.每执行一条SQL语句都会开启一个事务

事务的开启和关闭都需要消耗系统资源

(二).查

1.创建一个新的表

进行"查"操作时,我创建了一个新的exam表

2.全列查询

语法:

select * from 表名

示例:

注意:在实际的开发环境中,不建议这样不加任何限制的查询数据,如果一个表中的数据有上亿条,那么磁盘开销和网络开销都很大,可能会把服务器搞崩溃。

3.指定列查询

语法

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

示例:

上图中的结果就是我们只查询了 "编号","姓名","语文成绩"

4.查询的结果是一个表达式

举例:

①.把所有学生的英语成绩在原来的基础上加10分
②.列与列之间可以参与运算

5.使用别名

语法

select 列名 [as 别名] ······from 表名;

示例:

6.去重

语法

select distinct 列名 from 表名;

关键字distinct

示例

当我们只查询数学成绩的时候,发现有两个98,那么下面使用去重命令查询

我们可以看到,通过去重命令,发现,重复的记录只保留了一条

注意:distinct,在查询结果中,每一列都相同,MYSQL才认为他们是重复的数据

虽然使用了去重命令,有两个98,但是两个98的id都不相同,所以distinct也就不把他们当作相同的行。

去重时,只有查询的每一列都相同才会被认定为重复记录

去重后,重复记录只保留一条

7.排序

语法

select 列名 from 表名 order by 列名 [ASC | DESC];

关键字:order by ,表示查询结果中根据我们指定的规则对结果进行排序

这里的DESC 指的是 descent(下降)

示例

①.按语文成绩从高到低排序(降序)
②.对数学成绩进行升序排序
③.NULL数据排序,视为比任何值都笑,升序出现在最上面,降序出现在最下面

此时,我插入了一行新的数据,并且英语成绩为NULL,

那么现在将该表中的所有数据按照"英语成绩"进行排序

④.使用表达式及别名进行排序

同样可以使用别名进行排序

注意:

mysql中NULL比较特殊

(1).不论和什么值进行运算,返回的值都是NULL

(2).NULL始终被判定为FALSE

(3).NULL的值不是我们以前学习过的其他编程语言中的0,在MYSQL中始终就是NULL

⑤.可以对多个字段进行排序,排序的优先级与书写顺序有关

示例:

先按照数学成绩进行升序,再按照语文成绩降序

8.条件查询

关键字

where,根据指定的一些条件,过滤掉不符合条件的记录,把符合条件的记录返回给用户,可以通过一些运算符,比如,比较运算符,逻辑运算符 等等。

比较运算符

|------------------|----------------------------------------------|
| 运算符 | 说明 |
| >、>=、<、<= | 大于、大于等于、小于、小于等于 |
| = | 等于,NULL不安全,例如,NULL和NULL的结果为NULL |
| <=> | 等于,NULL安全,例如,NULL和NULL的结果为TRUE(1) |
| !=,<> | 不等于 |
| BETWEEN a AND b | 范围匹配,[ a,b ],如果a<=value<=b,返回TRUE(1) |
| IN(option,·····) | 如果是option中的任意一个,返回TRUE(1),()中的内容可以是一个列表或者是集合 |
| IS NULL | 是NULL,如果是NULL,则返回TRUE(1) |
| IS NOT NULL | 不是NULL,如果不是NULL,则返回TRUE(1) |
| LIKE | 模糊匹配,%表示任意多个(包括0个)任意字符,_表示任意一个字符 |
| AND | 多个条件必须是都为TRUE(1),结果才是TRUE(1) |
| OR | 任意一个条件为TRUE(1),结果为TRUE(1) |
| NOT | 条件为TRUE(1),结果为FALSE(0) |

=与<=>的演示
in(option,·····)的演示
LIKE的演示

where的语法在下面就会介绍到

首先明确,'%德',意味着 '德' 前面可以有任意个字符,所以显示出来了三个

上面的图片就是占位符多少的区别

这是 "%" 在后面的情况

is和is not的演示

语法

select * from 表名 where 列名/表达式 运算符 条件;

条件查询时,首先要确定好给哪个列设置相应的条件

示例

(1).英语成绩小于60的同学
(2).查询语文成绩大于英语成绩的同学
(3).查询总分在200分以下的同学

事实上,出现这种情况和MYSQL内部的实现有关,即与MYSQL内部执行SQL语句的顺序有关

执行顺序

1.如果要从某个表中查找数据,首先要先确定表,所以先执行from

2.在查的过程中,要根据指定的条件把符合条件的数据给过滤出来,此时执行的where

由于where执行的时候,total还没有被定义,所以才报错

3.执行select后面的指定的列,这些列是需要加入到最终的结果集当中

所以,当where条件中使用了表达式时,不能使用别名,要把完整的表达式写在where子句中

(4).查询语文成绩大于80且英语成绩大于80的同学
(5)查询语文成绩大于80或英语成绩大于80的同学
(6).查询语文成绩在 [80,90]分的同学
(7).查询数学成绩是58,78,84,98的同学
(8).%匹配严格的一个任意字符
(9).NULL的查询:IS [NOT] NULL;

9.分页查询

概念

分页查询可以有效的控制一次查询出来的结果集中的记录的条数,可以有效地减少数据库服务器的压力,同时对用户也比较友好。

之前刚开始介绍查询的时候,说过,不加任何修饰的查询是不安全的,容易把服务器搞崩溃,所以可以通过分页查询来解决该问题。

语法

①.select 列名 from 表名 [where ] [ order by ] limit n;

limit 表示限制要查询的条数

n表示"一次要查询出来的记录的条数"

②.select 列名 from 表名 [where] [order by] limit s ,n;

s表示"从第几条记录开始"

如果s=0,可以简化成 limit n

③.select 列名 from 表名 [where] [order by] limit n offset s;

offset 关键字,表示偏移量,也就是从哪开始的意思

我的编号是从1开始的,offset的默认情况是从第0条开始,所以会有点出入

分页练习

这是我现在的数据表

如何书写SQL语句可以让这个数据表分五次显示完成?

我们要去调整我们的 n 和 s

五次显示完,所以一次显示2条,刚开始的时候,s应该等于0;

所以第一页的 n为2,s为0

第二页的时候,应该显示id为3和4的数据行了

所以我们应该让n依旧等于2,s要修改成2,因为第二页的显示要跳过第一页显示的前两条

想一下,第一页的时候,s=0,第二页的时候s=2,那么第三页的s应该取何值?

应该要跳过第一页和第二页显示的前四条,所以s=4

那么s=(当前页-1)*n,例如,当前页为第三页,所以s=(3-1)*2=4

以此类推·······

(三).改

语法

update 表名 set 列名 =什么值 [where] [order by] [limit]

update 表示 "修改操作的关键字"

set 表示 "设置,关键字"

列名,可以有多个列

示例

①.将孙悟空同学的语文成绩修改成80分

②.再插入一条学生为"孙悟空"的数据,然后执行同样的更新操作

③.将"孙悟空"同学的语文成绩改成40

④.将"孙权"的数学成绩变成80分,英语成绩变成60分

⑤.将总成绩倒数前三名的同学的数学成绩加10分

首先,先明确,我们要修改的是"数学成绩",修改的对象是"总成绩倒数前三名",说明,我们要将表中的数据先求出总分,然后按照升序进行排序,排完序之后,我们需要将"前三名"的"数学成绩"加十分

由于"宋公明"数学加上10分之后,超过了"孙悟空"所以排名靠后了一位

⑥.把所有语文成绩高于50的同学的语文成绩更新为原来的1/2倍

注意

使用update更新数据的时候,一定要加where限制,如果不加的话,会将整张表的选中的列的所有数据修改

(四).删

语法

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

delete 表示 "删除"关键字

示例

删除"道德"同学

注意

如果删除没有加任何的where限制条件,那么删除的将是整张表。

相关推荐
_F_y5 小时前
MySQL视图
数据库·mysql
2301_790300965 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
九章-5 小时前
一库平替,融合致胜:国产数据库的“统型”范式革命
数据库·融合数据库
2401_838472516 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
u0109272716 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
wengqidaifeng6 小时前
数据结构---顺序表的奥秘(下)
c语言·数据结构·数据库
what丶k6 小时前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud
Code blocks6 小时前
kingbase数据库集成Postgis扩展
数据库·后端
天下·第二6 小时前
达梦数据库适配
android·数据库·adb
Dxy12393102166 小时前
MySQL INSERT ... ON DUPLICATE KEY UPDATE 批量更新详解
数据库·mysql