当前位置: 首页 > article >正文

MySQL:CRUD(增删查改)

目录

一、准备工作

二、Create 新增

1、语法

2、单行数据全列插入

3、单行数据指定列插入

4、多行数据指定列插入

5、多行数据全列插入

三、Retrieve 检索 

1、语法

2、全列查询

3、指定列查询 

4、查询字段为表达式 

(1)常量表达式

(2)表达式包含字段 

5、为查询结果指定别名

6、结果去重查询 

7、Where条件查询

(1)语法:

(2)比较运算符

(3)逻辑运算符

(4)基本查询

(5)AND和OR

(6)范围查询

(7)模糊查询

(8)NULL的查询

8 、Order by 排序

(1)语法

9、分页查询

(1)语法

四、Update修改

1、语法

五、Delete 删除

1、语法


在上一篇文章我们已经简单了解了库和表的操作,而我们在创建表的时候会建立很多的列,但是如果我们在原本的基础进行更改我们该怎么办呢?总不能把这个表删了,在创建一个新表吧,这太麻烦了。因此我们的数据库中也是具有增删查改(CRUD)的功能的。


一、准备工作

在对这些操作了解之前,我们先做好准备工作:创建库和表

为了保险我们先判断这个库是否存在就将他删除,然后再创建

当然创建表前也可以进行上述检验

好了这样我们的准备就做好了,接下来就开始我们的CRUD学习 


二、Create 新增

1、语法

INSERT [INTO] table_name
    [(column [, column] ...)]
 VALUES 
    (value_list) [, (value_list)] ...
 value_list: value, [, value] ...

大家看着这个语法可能有些不理解,我们其实可以将他用汉字表达下

INSERT INTO 表名 [列1,列2....] VALUES(值,值);

  • insert into : 插入的关键字,后面接要插入数据的表名,表名后面可以根据查询方式指定要插入的列
  • values :插入数据的关键字,后面接要插入的数据

2、单行数据全列插入

全列插入我们就不需要指定列进行插入了,这样我们的列就可以省略了,接下来我们就可以根据上面的语法进行编写

使用:

我们可以查看一下我们是否插入成功,这就要用到了我们下面要了解的查询操作,我们先在这里演示一下 。

可以看到我们是成功的在表中插入了数据


3、单行数据指定列插入

指定列插入在这里我指定了我们接下来要插入数据对应的列,我们需要写上我们要插入数据的列是那些,同时要插入值的数量必须和指定列数量及顺序一致

使用:

查看: 

我们发现我们这时指定了全部的列进行插入,如果我们要插入下一个学生的数学成绩不存在,我们就可以不指定插入数学成绩,但是此时这个学生的数学成绩会显示什么呢?

我们发现在这里他显示的将会是一个空值 


4、多行数据指定列插入

多行数据插入:既然我们可以指定多个列插入,那么我们也一定可以让多个不同行的数据进行插入,而插入的方法其实很简单,只需要在插入值的后边加上 ' , ' 然后在插入新的一行数据即可

使用:

查看:


5、多行数据全列插入

这个其实和我们上面展示的指定全部列插入是一样的,只是比他省略了列,因此在我们要全部插入时,使用全列插入即可。

查看: 


三、Retrieve 检索 

1、语法

SELECT
 [DISTINCT]
 select_expr [, select_expr] ...
 [FROM table_references]
 [WHERE where_condition]
 [GROUP BY {col_name | expr}, ...]
 [HAVING where_condition]
 [ORDER BY {col_name | expr } [ASC | DESC], ... ]
 [LIMIT {[offset,] row_count | row_count OFFSET offset}]

 DISTINC ,FROM,WHERE,GROUP BY,HAVING,ORDER BY ...[ASC | DESC],LIMIT这些都是我们的一些不同的查询方式,接下来我们会对他们一一进行讲解


2、全列查询

查询语句:select * from 表名;

这个方式在上面我们已经进行了使用,现在我们就对他进行一下了解

  • select :查询的关键字,后面接要查询的列
  • ' * ' :代表表中全部的列
  • from : 后面接我们要查询的表名

 使用:


3、指定列查询 

查询语句:select [列1,列2...] from 表名;

使用:


4、查询字段为表达式 

(1)常量表达式

查询的列有一个列为常量表达式

这个常量是可以进行计算的 


(2)表达式包含字段 

我们是可以利用这种表达式的方式让我们当前列的值进行某种运算的

同时这个表达式也是可以包含多个字段的,这样我们发现我们就可以直接得到所有学生的总成绩了 

当然我们这里需要注意:如果我们要进行运算的数据存在NULL,那么他最后的结果就是NULL 


5、为查询结果指定别名

我们其实可以发现我们上述获得总分后形成的表,不是很美观,上面的列名过长了,既然这样我们是否可以将他变短呢?这就要用到我们的别名了

语法:

SELECT column [AS] alias_name [, ...] FROM table_name;

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

在这里我们的as可以省略


使用: 


省略 as :

当然我们的别名也是可以用汉字的:

但是我们使用汉字的时候最好加上 (' ')单引号因为如果我定义的汉字别名中间有空格就会报错


6、结果去重查询 

我们目前表里并没有重复的数据,在插入一组数据

这回我们查询我们的数学列 

进行去重查询 

注意:使用DISCTINCT去重时,只有查询列表中所有列的值都相同才会判定为重复

如果我们加上id了他就不是我们所有的查询列表都相同因为我们的id列是不同的,因此我们不能进行去重


7、Where条件查询

(1)语法:

 SELECT
     select_expr [, select_expr] ... [FROM table_references]
     WHERE  where_condition

select [列1,列2...]  from 表名 where 条件

 看到这里,我们发现where后面是要跟着一些条件的,而这些条件的形成就取决于我们下面的这些运算符


(2)比较运算符

运算符说明
>, >=,<,<=大于,大于等于,小于,小于等于
=等于,对于NULL的比较不安全,比如NULL=NULL结果还是NULL
<=>等于,对于NULL的比较是安全的,比如NULL<=>NULL结果是TRUE(1)
!=,<>不等于
value BETWEEN a0
AND a1
范围匹配,[a0,a1],如果a0<= value<= a1,返回TRUE或1,NOT BETWEEN则取反
value lN (option, ...)如果value 在optoin列表中,则返回TRUE(1),NOTIN则取反
IS NULL是NULL
IS NOT NULL不是NULL
LIKE模糊匹配,% 表示任意多个(包括0个)字符; _表示任意一个字符,NOT LIKE则取反

(3)逻辑运算符

运算符说明
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1),结果为 TRUE(1)
NOT条件为 TRUE(1),结果为 FALSE(0)

(4)基本查询

① 查询语文小于70的学生及其成绩


② 查询语文成绩高于英语成绩的同学及其成绩


③ 查询总分在200以下的学生及其成绩

注意:这里会自动将为NULL的值过滤掉

同时,我们发现我们对所有成绩的和使用了别名,但是where后面的条件却没有根据别名进判断,

这是因为我们语句的执行顺序是:from -> where -> select。

会先选择要操作的表,然后进行条件筛选,最后将筛选的结果进行展示


(5)AND和OR

① 查询语文成绩大于80分且英语成绩大于80分的同学


② 查询语文成绩大于80分或英语成绩大于80分的同学


③ AND和OR的优先级 

and 的优先级是要高于 or 的所以我们在写类似以下语句时

我们要先明确我们哪一个要先执行,如果or要先执行,要加上() 


(6)范围查询

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

between ... and ...

and


② 数学成绩是78或者79或者98或者99分的同学及数学成绩

in()

or


(7)模糊查询

% 表示任意多个(包括0个)字符

① 查询所有姓孙的同学


_表示任意一个字符

②查询姓孙且姓名共有两个字同学 /三个字


(8)NULL的查询

is null

① 查询数学成绩为NULL的记录

在上面我们曾发现有一位同学的数学成绩为null,那么我们接下来就根据这个null找到这位同学 

 


② 查询数学成绩不为NULL的记录

当然我们能根据null去找为数学null的同学,那么我们也一定可以去找不为数学null的同学


在查询的过程中我们是推荐加上NULL过滤条件的 。

但是我们要注意,当我们要进行判断成绩是否为NULL作为条件过滤,不要使用等于号(=)与不等于号(!=,<>)。

因为在我们进行NULL与NULL的判断时只有,(<=>) 能得到true(1),其他的的判断结果都为NULL


8 、Order by 排序

(1)语法

-- ASC 
为升序(从⼩到⼤)
 -- DESC 
为降序(从⼤到⼩)
 -- 
默认为 ASC 
SELECT ... FROM table_name [WHERE ...] ORDER BY {col_name | expr } [ASC | DESC], ... ;

select [列1,列2...]  from 表名 【where 条件】 order by 列名 asc / desc ;


①  按数学成绩从低到高排序(升序)

注意:在这里NULL默认比任何数都要小


② 按语文成绩从高到低排序(降序)

注意:这里的desc是用来降序排列的,不是之前的查看表结构 


③ 查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示


④ 查询同学及总分,由高到低排序 

注意:在这里示可以使用别名的,因为这里的执行顺序示:from -> select -> order by.

先选择要操作的表,然后再表中进行查询和计算,最后再根据计算的结果进行排序 


9、分页查询

(1)语法

-- 起始下标为0 
-- 从0 开始,筛选num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num;
-- 从start 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT start,num;
-- 从start 开始,筛选num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num OFFSET start;

我们以3个数据当成一页进行查询


① 查询第一页数据(升序)

LIMIT num:默认从0开始


LIMIT start,num:从start位置开始 


  LIMIT num OFFSET start:从start位置开始 


 ② 查询第二页数据(升序) 


③ 查询第三页数据(升序) 

注意:start没有超过limit最大条数,有多少条就显示多少条,超过就显示为空

四、Update修改

1、语法

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
  SET assignment [, assignment] ...
  [WHERE where_condition]
  [ORDER BY ...]
  [LIMIT row_count]

update 表名 set 修改 where 要修改的行 【order by】【limit】


① 修改一个:将孙悟空同学的数学成绩变更为80分 


② 修改多个:将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分


③ 将总成绩倒数前三的3位同学的数学成绩加上30分 

再这里我们要利用is not null将等于null的过滤掉


五、Delete 删除

1、语法

DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

delete from 表名 where 删除的列 【order by】【limit】


① 删除孙悟空同学的考试成绩 


② 删除math 数学成绩为空的同学 


③ 将总成绩倒数前三的3的同学删除


 ④ 删除整张表的数据


好了,今天的分享就到这里了,还请大家多多关注我们下一篇见!


http://www.kler.cn/a/578802.html

相关文章:

  • 【C#】详解C#中的内存管理机制
  • 【C语言】--- 动态内存管理详解
  • Spring Boot与Axon Framework整合教程
  • Java EE 进阶:Spring IoCDI
  • RISC-V医疗芯片工程师复合型转型的路径与策略
  • 知识图谱相关的Terse RDF Triple Language 文件格式介绍
  • 微服务拆分-远程调用
  • 梯度计算中常用的矩阵微积分公式
  • 相机几何:从三维世界到二维图像的映射
  • MyBatis增删改查:静态与动态SQL语句拼接及SQL注入问题解析
  • golang dlv调试工具
  • 如何监控 Pod 的 CPU/内存使用率,prometheus+grafana
  • ②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
  • VSCode+AI编程生态实战:从环境配置到智能编码的全栈指南
  • 软考 中级软件设计师 考点知识点笔记总结 day02
  • Vite 打包后Nginx部署配置
  • QOJ9700 Ying’s Cup(拉格朗日插值优化卷积,背包,二项式反演)
  • 驱动开发系列46 - Linux 显卡KMD驱动代码分析(七)- 显存管理
  • VS Code连接服务器教程
  • 泛型、泛型上限、泛型下限、泛型通配符