下面我们要正式接触对数据的操作了,我们知道数据是被我们有序存放在数据表中的。对于数据,我们通常有四类操作:增加,删除,查找,修改,我们也称之为增删查改(CRUD),那么下面就让我们一一介绍。
基础操作
增加
增加操作基本语法是这样的:
insert into 表名 values(值,值...);
通过这条语句我们就可以加入一行数据,其中括号中的每一个“值”要与我们的列名相对应,针对这一列进行赋值。
举个例子吧,我们上篇文章成功的创建出了一个student表,它包含姓名,学号,年龄,班级四个属性,那么现在我们尝试往其中增加一个学生的数据,例如张三18岁,在二班,学号101,我们就可以使用上面的语法,将每一个属性对应:
insert into student values("张三",101,18,2);
那么我们可以看到结果,我们新增成功了,我们在表中记录了张三同学的数据。
那么我们新增数据当然也有其他方式,比如我们可以指定列插入:
insert into 表名(列名,列名...) values(值,值...);
举个例子,学校新转来了李四同学,19岁,目前还没有分配班级和学号,那么我们就可以指定列插入,将我们未知的信息空出来:
insert into student(name,age) values("李四",19);
我们可以发现,我们指定的列都有了其对应的信息,而我们没有填充的列,都会自动填充一个空值(null),我们后面也可以对其进行修改。
下面我们来进行新增的最后一个方式,一次插入多行记录。当我们面对多条记录时,运用前面的方式一行一行插入显然效率太低,一次插入多行则更加快捷方便,具体的语法是这样的:
insert into 表名 values(值,值...),(值,值...);
这个不难理解,我们也简单举个例子,现在我们直接一次插入三条学生的记录:
insert into student values("王五",103,18,2),("赵六",104,19,2),("孙七",105,18,1);
我们可以看到同样也是添加成功。
其中我们要注意,在sql中,使用单引号/双引号均可以表示字符串。
当我们要插入datetime类型,可以是一个固定格式的字符串来表示日期时间(如:"2020-01-01 12:00:00"),如果想增加当前时间,sql提供了现成的函数now()。
以上就是我们增加的三种常用方式。
修改
下面我们介绍修改的操作,修改的语法比较单一,也比较简单,我们将要运用update关键字,具体实现是这样的:
update 表名 set 列名=值 ,列=值... where 条件;
我们可以一次修改多个列,也可以仅仅修改一列,后面where之后的条件将会限制这次操作具体要修改哪几行的数据。简单来说,语句中的列可以理解为修改的位置的纵坐标,后面条件限制的是横坐标,由此来确定位置。
还是举个简单的例子吧,现在李四同学已经转入了我们学校,学校决定将他分入二班,学号102,这时候我们就要进行修改,那么我们可以这么实现:
update student set class=2,id=102 where name="李四";
我们通过name="李四"来确定修改的是李四这一行的记录,之后对他的各种属性进行修改,这就是修改的基本操作。
扩展:条件
我们发现,在删除操作中我们运用了一个熟悉的运算符组成了表达式来当作条件,那么,sql中条件都能怎么写呢,我们来介绍一些比较常见的。
1.运算符
首先是运算符,它与我们在编程语言中学过的运算符没有大的不同。
大于
<小于
=大于等于
<=小于等于
!=不等于
<=>/= 等于。这个我们需要着重说明一下,= 是null不安全的,<=> 是null安全的。当我们写下一个条件“null=null”,此时结果为null,返回false。而当我们使用<=>时,即“null<=>null”,这时结果会返回true。
2.各种语法
between A and B 范围匹配[A,B] 左闭右闭
option in(option1,option2,option3...),如果option是其中一个,就返回true
is null 是null
is not null 不是null
and和 or或 not非
3.运用like进行模糊匹配
% 代指任意个任意字符(0个也是任意个)
_ 代指任意一个字符
不知道大家有没有打过麻将或者扑克,这两个符号类似于麻将中的混或者斗地主中的癞子。
例如我们要找一个名字两个的姓孙的人,我们可以这么设置条件:
where name like "孙_";
当我们不知道这个人名字有几个字,我们可以使用%进行模糊匹配:
where name like "孙%"/where name like "%孙%"/where name like "%孙"
以孙开头/包含孙的/以孙结尾的
此处我们模糊查询的功能有限,在计算机中,还存在正则表达式来帮助我们,我们留到后面介绍。
查询
下面就来到我们的一个重难点,查询。在sql中,查询的方式多种多样,在这里我们先重点讨论单表的查询。
全列查询
这是最简单的查询,我们前面讨论时,当我们展示结果时运用的就是全列查询。顾名思义,我们可以通过这条语句把整个表展示出来,即把所有行和所有列都查询出来,具体语法是这样的:
select * from 表名;
比如我们上面想查询上面student整个表,我们就可以写:
select * from student;
结果显而易见。
*** 是通配符,可以代指所有列。**
查询出来之后,服务器通过网络把数据返回给客户端。我们要注意,针对数据量比较大的生产环境,不能随便进行查询。
指定列查询
顾名思义,我们只查询指定列的相关信息,其余信息并不显示出来,具体语法是这样的:
select 列名,列名 from 表名;
这个应该很好理解,我们也演示一下,例如我们只查询学生的姓名和学号:
select name,id from student;
查询字段为表达式、为表达式起别名
这里我们先看一张新的表:
学校进行了一场考试,同学们的成绩分别对应学号记录了下来,那么现在,我们想查询他们每个人的总分,我们有没有快捷的方式呢,这时我们可以将查询的列变成表达式,具体语法是这样的:
select 表达式 from 表名;
这样看有些难懂,我们就举这个总分的例子吧:
select id,Chinese+Math+English from test;
我们可以看到结果,我们直接查询出了总分,可以理解为我们可以对列之间进行一定的计算,同时我们当然也可以对单个列进行计算,比如我们想让语文成绩集体减掉十分,我们可以这么操作:
select id,Chinese-10 from test;
这种操作也是允许的。
下面我们来介绍别名,还是上面这个表,我们查询出来了总分,它显示Chinese+Math+English,我感觉好丑,能不能直接称之为总分呢?当然是可以的,我们可以利用as 关键字对它赋予一个新的名字,可以称之为别名,具体表达式是这样的:
select 表达式 as 别名 from 表名;
带入,我们可以这么操作:
select id,Chinese+Math+English as Total from test;
这样就又美观又便捷了。
需要注意,我们这里查询出了结果,但并没有对原来的test表有任何的改变,查询出的结果都是临时的。
去重
用distinct修饰的列会进行去重,值相同的只会保留一个,我们直接演示。
select distinct English from test;
我们通过去重去掉了一个88。
查询时排序
当我们在查询时要进行排序,我们需要确定两件事
1)针对那个列作为比较规则
2)排序的时候是升序还是降序
具体语法是这样的:
select 列名 from 表名 order by 列名 asc/desc;(asc和desc二选其一)
我们一点一点解释。
首先,order by 列名 代表指定某个列进行排序。
其次,asc代表按升序排序,desc代表按降序排序。
最后,asc/desc 可以省略不写,如果省略,就代表按升序排序。
我们要注意,我们是把查询到的结果进行排序,不改变原始数据。我们可以排多个列,如:order by Chinese,math 就是先按语文成绩排,如果语文成绩相同,就再按数学成绩进行排序。
现在,我们想针对学生的总分进行排序,给学生们排出名次,我们可以这么操作:
select id ,Chinese+Math+Englisgh as total from test order by total desc;
这样这个问题也就解决了。
条件查询
下面就来到我们最重要的条件查询,在这里,我们先给出查询的万能公式,当我们进行查询时,可以优先去套用:
select 列名 from 表名 where 条件 (order by);
我们可以发现,我们前面介绍的几种方式无非是省略了条件。下面我们就进行演示,我们在这里多举几个例子吧。
1)我们要查询学号为103号同学的成绩
select id,Chinese,Math,English from test where id=103;
我们就可以增加这样的条件。
2)我们想查询102号同学的总分,并显示为“Total”
select id,Chinese+Math+English from test where id=102;
我们可以看到,查询时可以将前面的都进行结合。
分页查询
什么是分页查询呢?当我们进行全列查询,发现数据很多时,我们会很容易想到我们可不可以一次少看一点数据呢?只看前十个可不可以?看第二十个到第三十个行不行呢?答案是肯定的,这里我们就要运用分页查询,对查询出来的记录数量进行限制。
这是我们进行分页查询的公式:
select 列名 from 表名 where 条件 order by 列名 limit A offset B;
其中A和B是两个整数,offset代表偏移量,而偏移量具体是多大为B,我们可以查询从第B条开始往后共A条数据,不加offset,则从0开始。
select * from test limit 1 offset 3;
结果就是这样的,这就是我们的分页查询,它可以有效的限制我们查询的记录的数量,方便我们观察、操作,做出下一步动作。
删除
而最后的删除就很简单,我们直接看语法:
delete from 表名 where 条件/order by/limit;
想必我们都可以理解,当我们什么都不加,我们就是删除了整个表。注意,这里是删除了整个表中所有的数据,而不是删除了这个表,表本身依旧存在,只不过空了。
我们可以看到,我们删除了student表中所有的数据,表依旧可以被查询到,只是空了。
小结
这篇文章中,我们讨论了对于单表的增删查改。我们学会了对单表中的各种数据进行处理。
那么当我们遇到了多个表,我们该如何进行操作呢?所以,下篇文章,我们将讨论遇到多表的各种情况。
那就先到这里吧。
版权归原作者 时间幻灭‘ 所有, 如有侵权,请联系我们删除。