目录
前言:
1.CRUD的解释
2.表的基本操作
2.1查看数据表
2.2创建表
2.3查看指定表的表结构
2.4删除表
2.5注释
3.新增(Create)
4.查询(Retrieve)
4.1全列查询
4.2指定列查询
4.3查询字段为表达式
4.4指定别名
4.5去重查询
4.6查询结果排序
4.7条件查询 where
4.8范围查询
4.8.1 between...and...
4.8.2 in
4.8.3模糊查询like
4.8.4null的查询:is [not] null
4.8.5分页查询limit
5.修改(Update)
6.删除(Delete)
结束语:
前言:
上一次博客中小编主要给大家讲解了有关于如何创建一个数据库,怎么选中一个数据库,以及有关于表的创建和删除。我们现在来简单的回忆一下吧,查看所有数据库的操作是:show databases; 创建数据库的操作是:create database 数据库名; 选中数据库的操作是:use 数据库名; 删除数据库的操作是:drop database 数据库名;这里我们要注意删除数据库的操作是非常危险的操作,我们在操作的时候一定要小心小心再小心。 那么这节里面我们主要就与大家讨论怎么使用我们所创建出来的这张表,以及表的一些基本的操作(增删改查)我们也称之为CRUD。
1.CRUD的解释
CRUD即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)这四个单词的首字母缩写。那么我们下面就分别给大家来介绍一下这四个在我们MYSQL的客户端中都是怎么使用的,但是在介绍怎么CRUD之前我们先来给大家介绍一下我们究竟如何创建出一个表怎么查看表的结构怎么删除表。
2.表的基本操作
2.1查看数据表
语法:
show tables;
案例演示:
注意:这里由于我们还没有创建出一个表所以表里面显示的是空。
2.2创建表
语法:
create table 表名(列名 类型, 列名 类型,列名 类型,......)
案例演示:
我们看到我们在上面使用的类型中都是带有符号的(带有正负号),但是MySQL是否有无符号类型呢?答案是有滴,MySQL官方文档中明确地无符号类型有但是不建议使用,而且在未来的版本中就不会在支持了。
还有一个点就是我们发现我们在编写后面的列名和类型的时候是列名在前类型在后,这和我们之前所学习的编码习惯有点违背,大家一定要注意!!!
2.3查看指定表的表结构
语法:
desc 表名;
案例演示:
上图对应列的解释:
这是有同学就好奇了为什么子啊第二行中int后面我们在定义的时候明明什么都没有写,为什么会出现一个11呢? 这里小编个大家来解释一下,int(11)这里的意思是我们在客户端里查询显示的时候最多显示11个字符,和你到时候存储多大的值无关。
2.4删除表
语法:
drop table 表名;
案例演示:
注意:删除表的操作和删除数据库的操作一样都是一个危险的操作!!!需要我们慎重!!!
2.5注释
我们在MySQL客户端的时候也是可以加注释的。
通常我们使用的注释有:
- comment:这个不太好用一般不太推荐。
- --或者是#:这个是我们一般经常用到的注释。
如下面的演示所示:
3.新增(Create)
语法:
insert [into] 表名 values(值,值,.......);
案例演示:
我们还是以上述创建的student为例进行演示。
这样我们就向student表中插入了一条记录,同样我们也可以一次插入多组记录。
我们一般是推荐大家使用一次插入多组记录,这样我们就可以提高我们插入数据的效率了。
插入的时候我们还可以指定某一列来进行插入。
如下所示:
我们也可以插入时间。
我们先来创建一个表。
然后我们对上述表中插入一行数据。
我们是通过指定的格式来进行插入的:形如上述的‘2023-05-19 10:24:00’来进行插入。我也可以通过now()来获取当前的时间。
如下所示:
4.查询(Retrieve)
4.1全列查询
语法:
select * from 表名;
案例演示:
我们就上述我们刚刚插入值的homework表为为例。
注意:
我们这里的查询操作也是非常危险的操作!!!如果我们的数据量非常大的时候就会引起一些问题的。你可以将你的硬盘想象成建筑工地,现在从硬盘上拉取数据,就相当于是大卡车从建筑工地上拉取很多货物,如果车过于多的话,我们的道路又有些窄,那么就会发生堵车,别人想要从这条路走就走不了了,也就是如果还有其他程序想要使用硬盘的话就会导致堵塞使用不了了。,所以查询操作就会比较危险。我们要牢牢记住MySQL是一个客户端服务器结构的程序,当我们在客户端发送一条查询请求的时候服务器就会根据我们的请求将SQL查询到的数据读取出来再通过网络返回给客户端。此时我们所得到的这张表相当于是一个“临时表”,这个“临时表”也叫做“结果集”。
4.2指定列查询
语法:
select 列名,列名.....from 表名;
案例演示:
我们以上述创建的student表为例。
4.3查询字段为表达式
语法:
select 表达式 from 表名;
案例演示:
我们先来创建一个带有成绩或者是数字的表。
如下所示:
我们在对上述的表中插入一些数据。
接下来我们对数学、英语、语文进行相加运算查询。
4.4指定别名
但是我们看到这里面是对三门科目进行了一个相加在表头上面显示的是运算的表达式,这样的显示不够直观我们可以给他起一个别名来进行显示,此时我们就可以通过在表达式后面加上as关键字来进行命名。
如下所示:
这里要注意我们这里的运算都是列和列之间的运算。不是行和行之间的运算,后面我们还会学习行和行之间的运算叫聚合运算。
4.5去重查询
语法:
select distinct 列名 from 表名;
案例演示:
没有去重之前:
去重之后:
注意:distinct指定多个列的时候,要求这些列的值都相同,才视为重复。
4.6查询结果排序
语法:
select ... from 表名 [where ...] order by 子句 [asc | desc];
-- asc 为升序,默认为升序。
--desc 为降序
案例演示:
升序案例演示:
降序案例演示:
注意:这里给大家明确一点我们这里底层的排序是按照归并排序进行排序的,还有我们之前在查看表结构的时候用到的关键字也是的desc,大家就好奇了是不是他两个都是一样的,这里小编给大家说一下之前查看表结构的那个desc是describe英语单词的缩写,而我们这里的是descend的缩写,两个是不一样的,大家不要弄错了。
如果是指定多个列进行排序,则如果这个列越靠前,就是越关键的排序依据。
如下所示:
4.7条件查询 where
条件查询:在查询的时候指定筛选条件,我们将符合条件的数据留下,不符合的直接pass掉。
在SQL中有一系列的运算符来进行表示条件:
比较运算符:
运算符 | 说明 |
>、>=、<、<= | 大于,大于等于,小于,小于等于 |
= | 等于,null不安全,例如null= null的结果是null |
<=> | 等于,null安全,例如null <=> null的结果是true(1) |
!=、<> | 不等于 |
between a0 and a1 | 范围匹配,[a0,a1],如果a0 <= value <= a1,返回true(1) |
IN(option,.......) | 如果是option中的任意一个,返回true(1) |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
like | 模糊匹配,%表示任意多个(包含0个)任意字符;_表示任意一个字符。 |
逻辑运算符:
运算符 | 说明 |
AND | 多个条件必须都为true(1),结果CIA是true(1)。 |
OR | 任意一个条件为true(1),结果为true(1)。 |
NOT | 条件为true(1),结果为false(0)。 |
注意:
- where条件可以使用表达式,但是不能使用别名。
- and的条件高于or,在同时使用时,需要使用小括号()包裹优先级执行的部分。
案例演示:
以下面的这个表格为例进行查询。
查询英语不及格的同学及成绩(<60)
这里的查询就相当于是针对数据库的表进行遍历,取出每一行的数据,把数据带入到条件中看条件是否符合,如果是真,就保留这条记录作为结果集的一部分,如果是假,这个记录就pass掉。
查询语文成绩好于英语成绩的同学。
查询总分在200分以下的同学。
当我们在指定别名的时候在where中使用别名的时候我们就会发现报错。
如下所示:
因此我们不可以在where中使用别名。正确的使用如下所示:
查询语文成绩大于80,或英语成绩大于80分的同学。
查询语文成绩大于80且英语成绩也大于80的同学。
注意:
如果一个where中既有and有存在or,就先执行and后执行or,这个小编不建议大家去背,大家可以在使用这两个的时候给加上()。
4.8范围查询
4.8.1 between...and...
他约定的是前闭后闭的区间,相当于是我们学习的那个闭区间。
案例演示:
查询语文成绩在[80,90]分的同学及语文成绩。
我们也可以通过and达到同样的目的。
4.8.2 in
查询数学成绩是55或者88或者90分的同学及数学成绩。
其实我们使用or也是可以实现的。
4.8.3模糊查询like
% 可以匹配任意多个(包括0个)字符。
_ 匹配严格的一个任意字符。
4.8.4null的查询:is [not] null
为了方便演示,我们在之前的表中加入两行空值。
查询语文成绩为空值的同学。
这里我们也可以之间使用<=>来进行判断是不是空值。
这里就有很多同学有疑问了,为什么我们不用=来进行判断呢?
我们先来在MySQL客户端来试一下,看一下会出现什么样的效果。
原因是因为=不能处理null,我们之前说过null与任何值运算都是null,但是我们使用<=> 来进行比较的话MySQL是帮助我们处理了null的这种特殊情况的。
查询数学成绩不为空的同学。
4.8.5分页查询limit
limit的下标为0.
从0开始,筛选n条结果。
从s开始,筛选n条结果。
从s开始,筛选n条结果。
我们也可以使用limit...offset...来进行限制筛选结果。这是我们一般建议使用的。
查询总分前三的同学的总分信息。
5.修改(Update)
语法:
update 表名 set 列名 = 值, 列名 = 值.......[where 条件]; [order by] ; [limit ];
案例演示:
将孙悟空同学的数学成绩变更为80分。
将曹孟得同学的数学成绩变更为60分,语文成绩变更为70分。
将总成绩倒数前三的3位同学的数学成绩加上10。
将所有同学的成绩更新为之前的一半。
但是我们发现上面会报有一个警告。
我们可以通过show warnings来查看这个警告的具体内容是什么。
注意:
小编这里再次给大家强调一下update也是一个危险的操作!!!大家在使用的过程中要慎重。
6.删除(Delete)
删除记录行。
语法:
delete from 表名 where 条件;order by;limit;
案例演示:
删除所有姓孙的同学的信息。
这个操作就相当于删表,只不过是drop删除表操作是直接连表都没有了,而delete操作是删除了表里面的所有内容,但是表还在。由此我们可以看出来delete操作也是非常危险的一个操作!!!
结束语:
好了数据库的CRUD操作小编就给大家介绍到这里啦,下一节小编将会继续给大家介绍一些数据库里的其他知识,大家继续跟紧小编的步伐,一起往前冲!!!希望这节对大家认识数据库有一定的帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)