数据库的重要操作就是表的增删查改(CURD)
先带领大家认识几个单词:
C create 本义创建,但就是新增的意思嘛。
U update本义更新,即修改的意思。
R retrieve本义检索,即查询的意思。
D delete本义删除,就取原义删除。
一·新增(create):
1.插入完整行数据语法:insert into 表名 values(列 列 列...)
提示:values后面()中的内容,个数以及类型和表的结构必须匹配。
我们可以看到,在创建教师这个表的时候,我们依次设定了名字和id,在使用insert进行插入时,也要一次设置名字和id才可以插入成功。
注意:插入也是有效率之分的,一个一个插入肯定不如一次性插入效率高,就好比你嗑瓜子,你嗑一次就吐一次皮和嗑一会儿攒一攒一起扔掉哪个更方便呢?所以我们在此也可以同时插入多行。我用荧光笔给大家标注了出来。
其次,我们除了可以完整的插入一整行数据,我们也可以指定列去插入,那么其他列将使用默认值来填充。此处的Default就是我们对应字段的默认值。
2.指定列插入语法: insert into 表名(列名)values(对应的数据类型);
大家可以看到,我们指定id列进行了插入,而name列当中,未插入的值我们就用NULL来填充。
二.查询(select)
查询时增删查改当中最复杂的操作,变幻多端,深不可测。增删改的操作基本固定,没有什么难度,但是查询是非常灵活多变的。我们今天只介绍基本的查询操作。
1.全列查询:语法 select * from 表名
解释:此处的select是关键字语法,*是通配符,无论有多少列多少行,都可以用通配符来表示,看到此大家也肯定会想到是不是可以替换*进行指定列的查询呢?答案是当然可以,我们稍后揭晓答案~
我们仍然用上图来给大家体现全列查询~
注意:当前我们的数据库没有多少数据,大家可以进行全列查询,但是当我们工作后,如果表格中数据非常多,如银行卡用户,学生姓名表,如果此时进行全列查询,资源(包括但不限于内存,CPU资源,等等)会被占满,到时候会对程序造成严重影响。
2.指定列的查询:语法 select 列的名字 from 表名
3.查询列为"表达式",在查询的过程中,进行一个简单的计算(列与列之间)
语法:select 列名,表达式(可以增加多列多个表达式,之间必须要有,分隔)from 表名
说明:(1).以上的select查询,仅仅是查询,无论如何去组合,如何去操作,都不会修改硬盘上的数据。 (2).使用查询的时候,我们看到的表格都是临时表,不会修改原表中的数据。
4.给查询结果的列指定别名:
在3.地基础上,我们查询英语和数学的总分时,我们可以给英语数学成绩的总和起一个别名。
大家可以看到,我将英语数学的总成绩写成了一个列表total;
5.查询之排序
上面我们介绍了查询的一些基本操作,但在查询的基础上,我们还可以进行排序。排序也是日常生活中经常会用到的,成绩表格,员工业绩,博客排行榜之类的。
(1).运用关键字order by进行排序,如果未作说明,则默认是升序排列;
在order by 后面加上desc就成了降序排名。
如图,我们按照英语成绩从低到高,进行了排序。
同样的方法,我们按照总分从低到高,升序排序 ,而且此处我们才用起别名的方式来进行排序。
(2).注意:如果比较的队列当中有NULL,那么NULL就会被认为是最小的值,千万不要把NULL理解成是数值0。如图我们也可以看到,进行升序排列时,Null是最小的数!
同样的,我们知道我们排序也可以针对表达式/别名来进行,而且NULL和任何值进行运算,他的值仍然是NULL。即使name为null的一行,english有分数,math为Null,相加后仍然为NULL;
(3)排序还可以指定多个列来进行排序(更复杂的比较规则)
排序指定多个列排序的时候,先以第一个列为标准进行排序,如果第一个列值是相同的那么就来比较第二个列以此类推。如图可见,张海明,王复明的英语分数是相同的,则排名时按数学高低进行排序。同样地我们观察到江一生的数学虽然高于张海明,但是优先用英语排序,因此张海明排名高于江一生。
(4)使用关键字distinct进行去重:
distinct去重的时候,可以单个列进行去重,也可以多列进行去重,但是要注意的是,必须是指定的所有列相同的时候才可以去重。
查询的总结:
1.全列查询:select * from 表名;
2.指定列查询 select 列名字 from 表名字;
3.带表达式的查询 select 列名/表达式 from 表名;(如果有多个列或者表达式,之间需要用,分割);
4.带别名的查询 select 列名/表达式 as 别名 from 表名;
5.去重查询 select distinct 列名 from 表名;
6.排序 select 列名/表达式 order by 列名,表达式,别名 asc(默认升序排序)/desc(降序排序)
7.条件查询:
以上的查询,我们只是进行了初步的查询或者排序操作,但是想要让查询的范围更小更精准,我们就需要用条件来限制查询的范围。
而要想描述条件,我们就要有一些关系运算符以及逻辑运算符
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,null不安全,比如null=null结果仍为null |
<=> | 等于,null安全,比如 null<=>null结果为TRUE(1) |
!=,<> | 不等于 |
BETWEEN a0 and a1 | 给定范围区间[a0,a1],如果a0<=value<=a1,返回TRUE(1) |
IN(options) | 如果是options 中的一个,则返回true(1); |
IS NULL | 为NULL |
IS NOT NULL | 不为空 |
LIKE | 模糊匹配,%表示任意多个任意字符;_表示一个字符 |
运算符:
运算符 | 说明 |
and | && |
or | || |
not | ! |
接下来,我用举一些例子为大家演示:
(1).查询英语及格且数学成绩在八十分(包括八十分)一下的同学
(2).查询英语不及格或者英语成绩为NULL 的同学
(3).查询英语成绩在[80,90]分的同学
8.简单的对%以及_的使用进行举例(模糊匹配)
%是可以表示任意字符,如下图,以王开头的都可以表示出来;
_只可以表示一个字符,如下图,必须以王开头的名字只有两个汉字的才可以表示出来 。
9.对Null的判断的一些说明:
当我们判断为NULL的时候,不可以用=,否则,即使是NULL也会被判断为不安全,即返回false。我们需要使用is null或者<=>。
而is null 只可以判断一列,<=>可以直接判断两列
10.如果查询的结果太多,我们想人为的控制查询的数量,Limit关键字应运而生~
在句子末尾加上 LIMIT N,就是指,不管查询多少条结果,最终只会显示N条
同时,我们也可以使用limit加上一些达到一些实际意义:
比如我想查询英语前三名的同学:
先进行降序排名,然后选取前三位即可。
同时LIMIT也为我们后来的分页查询奠定了基础。分页查询也在生活中广泛使用,当我们使用百度 进行查询的时候,我们拉到底页会发现有很多页查询结果,我们认为的控制了每一页查询的数量,这就是进行了分页查询。
三.修改:
查询的基本内容是不是很多,翻越了查询这座大山,我们后面的修改和删除操作都更为固定简单,大家终于可以放松一下啦~
修改:语法 update 表名 set 列名 where 条件;
修改的操作是切实的改变了服务器硬盘的数据了,这样的修改完成之后将会吃就生效!
(1)如果没有使用where,修改就会将所有行的数据都进行修改:
(2)update同时也可以修改多个列的值,要用,分隔开
(3)update还可以结合order by 和Limit进行使用
给总成绩倒数四名的同学数学分数加上五分;
四.删除(delete):
语法: delete from 表名 where条件;
同样的,与update一样,我们也可以将delete与limit以及order by联合使用
删除英语成绩小于70,并且英语成绩倒数后两名同学的数据
到此我们终于讲完了增删查改,不管简单与否,大家都要重视起来,下节博客我们将对查询做更深入的学习,而今天这篇文章是下篇博客重要的基础,大家一定要反复巩固~
一定要自己敲代码!!!