系列文章目录
例如:第一章 数据库基础
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 系列文章目录
- 前言
- 一、对数据简单操作
- 新增操作 (create)
- 查询操作(select)
- 模糊查询
- 分页查询
- 修改操作(update)
- 删除操作(delete)
- 拓展
- 总结
前言
在前文中,对数据库有了一个基本的认知,在本文中将开始对表中的数据进行增删改查(CRUD)操作。
一、对数据简单操作
新增操作 (create)
这个操作的命令行为 insert into 表名 values (值,值);
我们需要注意"值" 中所填入的数据的数量、类型、含义都要和表头的结构相匹配。
如student 表中,表结构顺序依次为Sno,name,因此使用新增操作要按顺序插入。而name为字符串类型,因此插入的数据要用引号包含。
为什么一定要按顺序填入数据?因为SQL是“弱类型”的语言,它支持“隐式类型转换”。
以下面的语句为例,我们知道’20’属于字符串类型,与int类型是毫不相干的。但是却能够运行成功。这是因为SQL自动将’20’转换成了20 。
新增数据的操作可以指定列插入。命令行为 insert into 表名(列名) values (值);
为了提高效率,新增操作可以一次性插入多行记录。(同样这个操作也支持指定列操作) 命令行为 insert into 表名 values (值,值),(值,值)……;
查询操作(select)
1. 首先最简单的查询就是全列查询 命令行为 select * from 表名;
对于select * 操作,是对于小数据库比较合适的。如果数据库体量大,服务器就会进行大量的IO操作,可能会大量占用系统资源。
2. 查询操作同样可以指定列查询。
命令行语句为 select 列名 from 表名;
我们需要确保查询的列名字是表名中存在的。
3. 查询操作支持表达式查询**,查询的结果不仅仅是列,而是可以把列中的数据代入到表达式中进行运算。
如下图所示,对course表中的Chinese数值+10 之后可以查询出来,但是这个值只是临时结果,并不会存入数据库中,只支持查看。**
4. 去重查询
针对查询结果进行去重,存在重复的数据就会将重复的行合并成一行。
命令行为 select distinct 列名 from 表名;
5. 带有排序的查询
在selec查询结果中,默认是“无序”的,而要让数据有序的进行排列,则需要使用order by语句。
命令行为 select * from 表名 order by 列名
使用order by 是对数据进行升序排列;如果要对数据进行降序排列,则需要使用desc关键字。
命令行为 select * from 表名 order by 列名 desc;
数据的查询 条件也可以通过表达式的方式进行查询,
在下面的例子中,通过chinese+math+english as total 计算总分排序,而id = Null的数据中,只有chinese = null。因此我们可以知道,SQL进行算术运算时,如果某个操作数为NULL,则最终结果就为NULL
6. 指定多个列排序
order by可以指定多个列进行排序
命令行 select * from 表名 order by 列名 ,列名
以下面的SQL语句为例,首先根据math进行升序排序,当math成绩相等时,则以chinese进行第二选择排序。
同时也支持多列查询+降序的查询方式,只需要在列名后加上desc即可
7. 条件查询
条件查询是最重要以及最常用的一种查询方式。
命令行为 select * from 表名 where 条件;
在SQL语句中,判断是否相等的符号已经不是"==" 而是"="
通过条件查询我们可以知道,一个SQL语句的执行顺序为:
1、遍历数据库表
2、代入条件
3、计算列名中的表达式
4、排序/聚合 等操作
我们可以知道首先执行的where的条件,**因此在where中 使用as 定义的别名的顺序是在这之后的,**这样一来难以做到想要的条件。
在条件查询中,有几个关键词可以进行使用,分别有and、or、between and、in。
and 和 or属于逻辑运算,是十分简单的一点,不再赘述。
between and的意思是二者之间,属于一个连续的区间;而in则表示的是一个离散的区间。
我们可以通过下面的案例来看到in 的使用方法,in如果使用离散的方式来作为条件,那么我们就可以看到只有达到对应的值才能被获取到,而如果用in表示一个区间,就可以和between一样表示一个连续的区间的值了。
模糊查询
模糊查询和普通的查询并不相同。就像搜索引擎一样,只输入前几个字符,搜索结果就会出现许多有关这段字符的内容。这就属于模糊查询。
在SQL中,使用like关键字代表模糊查询,模糊查询有自己的通配符:‘%’ 来描述匹配规则。
以下面的SQL语句为例 select name from exam_result where name like '孙%';
这个SQL语句所查询的内容为孙字开头包括但孙字的结果。同理如果’%孙’则是匹配以孙字结尾的结果。'%孙%'则表示匹配包含孙字的结果。
在这种模糊查询的过程中,使用like进行模糊查询的效率是很低的。在表数据量大,匹配规则十分复杂的情况下,将需要更多的时间和系统资源来执行这个语句。
分页查询
分页查询是十分常用的一种查询手段。简单的例子就是假设100条数据,我们可以分成每页5条的方式进行查询。这种方式获取数据对于网络或者浏览器都能够减轻许多压力。
分页查询中涉及到的关键词有 limit 限制本次查询最多返回多少条记录。接着我们就需要搭配offset 关键字,即“偏移量”。
假设一页显示3条数据,在第一页中为limit 3 offset 0;而第二页就是 limit 3 offset 3;以此类推。
此外还有一种简略写法,limit A ,B的表达方式。A相当于offset 而B表示的是最大条数。
当学会了分页查询,我们就可以依靠技巧来获取诸如排名等数据的获取了。下面的SQL是获取总成绩排名前三的数据。
修改操作(update)
修改操作即update 最简单的使用语句就是 update 表名 set 列名 = 值 where 条件
在修改之后,matched 表示匹配到的,而Changed表示修改成功的。有时修改的值为非法的值,那么就会导致修改失败,matched > Changed
修改操作也可以同时修改多个列的数据,将set 后面写多个列,分别进行赋值即可。
修改操作同时也能搭配order by 和 limit这些关键字
比如下面我们尝试将总分排名倒三的学生英语成绩加上3分。
update exam_result set english = english + 3
order by chinese + math + english
limit 3;
删除操作(delete)
删除操作是以 行为单位进行删除的。最简单的SQL形式为 delete from 表名 where 条件;
如果不加上条件那么整个表里的内容都会被删除。删除整个表的操作为drop table表名
拓展
- 针对空值进行查询。
在SQL中,null = null 为false 即条件是不成立的。假设条件查询中需要查询name值为null的数据,如果使用" where name = null "的SQL语句来编写的话,由于条件判断结果为false,因此得到的是空值。
那么如何查找出NULL的数据呢?我们可以使用"is null"的方式来对条件进行判断。
除了使用is null 的判断,我们还可以使用 <=> 来进行判断。而这种方式还可以针对多个列进行使用,使用的范围会更加广泛。
总结
对于数据库的增删改查操作,最简单的
增 insert into 表名 values();
删 delete from 表名 where 条件;
改 update 表名 set 数据 where 条件;
查 select * from 表名 where 条件;
在这些操作中,查找的可变性是许多的,需要多多练习。