Excel & SQL | 数据的获取 | 01


我们把商标中的数据存储在demo数据库的chapter5表中。

具体如何把上表中的数据存储到demo数据库的chapter5表中呢?首先在demo数据库中新建一张名为chapter5的表,然后分别新建id、name、class、age、score列,表和列新建完成后,再将本地的CSV文件导入即可。

(数据导入其实很简单,使用数据库管理工具,比如navicat 都可以进行导入)

获取列

我们都知道一个数据库中有多张表,每张表又有多个字段,即多个列。

当我们并不是每次进行分析的时候都需要用到全部的表和全部的列,我们可以根据自己的需要选择想要的表或列。

获取全部列

如果想要获取SQL的chapter5表中全部列,则通过以下代码:

select * from chapter5;

*表示获取一张表中的全部列,运行上面的代码就会得到chapter5表中的全部列。

获取特定列

在SQL中,如果我们要获取特定的某几列,只需要把代表全部列的*换成对应的列名即可,比如要获得id列和class列。

select id,class from chapter;

运行上面代码,得到结果如下。

获取想要的行

获取全部行

如果只指定了要获取哪些列,对行没有指定,则默认获取的是这些列的全部行。

获取前几行

有时候,我们可能只想看一下某张表中各个字段的数据都是什么样子的,这个时候我们就不需要获取所有的行,因为每行的数据都差不多,所以我们只要获取前几行就可以了。

在SQL中,可用使用limit来对获取行数进行限制。

select * from chapter5 limit 5; # 获取前5行

运行上面代码,得到如下结果。

limit除了可以限制前几行,还可以写为 limit x,y 的形式,表示获取第x行(不包括x行)以后的y行数据。

select * from chapter5 limit 2,3;

运行上面代码,可以获取第2行(不包括第二行)以后的3行数据。

获取满足单一条件的行

有时候,我们不只是单纯地先获取前几行,而是想要获取满足特定条件的某些行,比如,获取age列中等于18的所有行。

在SQL中,可以利用where来指定据具体的条件,把具体的条件放在where后面即可。

select * from chapter5 where age=18;

运行上面代码,得到结果如下。

获取满足多个条件的行

有时候,一个条件可能不能满足我们的需求,需要同时用多个条件来进行限制。比如,我们要获取age列等于18且class列等于一班的所有列。

在SQL中,我们可以直接在where后面用逻辑符来连接多个条件。

# and 与
select * from chapter5 where age=18 and class="一班";

上面是以两个条件为例的,也可以使用多个条件,多个条件之间还是直接用逻辑符连接即可。

逻辑符除了用and,还可以用or,表示两个或者多个条件中只要有一个条件满足即可。比如,我们要获取chapter5表中age列等于18或class列等于一班的所有行,可以通过如下代码实现:

# or 或
select * from chapter5 where age=18 or class="一班"

在上面的代码中,关于where后面的比较运算符我们只用了等于,还有更多的比较运算符可以用,比如,大于、小于、介于等,后续章节会详细讲述。

行列同时获取

前面两节内容都只是单独对行或列进行获取,我们也可以同时对行和列进行获取,即获取某些列的某些行。

所谓的行列同时获取,就是把单独获取行和单独获取列的代码组合在一起,比如,我们要获取chapter5表中age列等于18且class列等于一班的id列和name列,具体实现代码如下:

select id,name from chapter5 where age=18 and class="一班";

运行上面代码,就会把chapter5表中满足age列等于18且class列等于一班的id列和name列获取出来。

插入一列固定值

有时候,我们会有这样的需求,除了要获取原始表中现有的数据,我们还想在select结果中根据选取的数据特征插入一列固定值。
比如,我们要从chapter5表中获取age列小于20的id列和name列,并希望用一列标签列来标识这些人的年龄情况。

在SQL中,我们想要给查询结果插入一列固定值,只需要把这列固定值当作表的一列即可,具体实现代码

select id,class 'age<20' as label from chapter5 where age<20;

label列中每个都是字符串"age<20",其中,as表示给这一列起一个别名。

JSON列解析

有时候,数据库中的数据是按照JSON格式存储的,什么是JSON格式呢?如果读者学过Python,应该都知道字典这种数据结构,就是最外层用的花括号括起来,花括号中是key:value的形式,key可以理解成普通表中的字段名,value就是这个字段的值,一班花括号中会包含多个key:value,也就是虽然只用了一列位置,但是存储了列数据,用户可以根据需要选择对应的key:value值。

在SQL中,可以使用json_edxtract()对JSON列中的数据进行获取。

chapter5表中的score列就是JSON格式,比如,我们要获取每个id对应的数学成绩,可以通过如下代码实现。

select id,json_extract(score,'$.数学') as '数学成绩' from chapter5;

json_extract()主要有两个参数,第一个参数需要说明JSON格式的列名,此处是score列;第二个参数需要说明你要获取JSON中具体哪个key对应的value值,注意,key前面的$.符号不可少。

json_extract()用于获取JSON中key对应的value值,如果我们还想要查看JSON中都有哪些key,则可以通过json_keys()来实现。

比如,我们要查看每个id对应的score列中都有哪些key

select id,json_keys(score) as "科目" from chapter5;

对结果进行排序

对结果进行排序也是我们经常会执行的操作。

在SQL中,我们要想将结果列按照某列进行排序,需要借助order by来实现,比如,我们要将chapter5表按照age列进行升序排列,具体实现代码如下:

select * from chapter5 order by age;

我们可以看到上面代码运行的结果是按照age列进行升序排列的,这是order by默认的排序方式,如果我们想按照age列进行降序排列,则可以在age后面加一个desc,表明降序排列,具体实现代码如下∶

select * from chapter5 order by age desc;

与desc对应的是asc,表示升序排序,order by默认是升序排序,所以当我们对数据进行升序排序时,一般省略不写。

如果我们在SQL中也想按照多列进行排序,那么只需要在order by后面指明要排序的多个列以及每个列对应的排序方式即可,比如,我们要对chapter5表中的class列进行升序排列,对age列进行降序排列,具体实现代码如下︰

select * from chapter5 order by class asc,age desc;

如果我们要对多个列进行统一的升序排序,则可以直接键多个列名用逗号分隔开,省略排序方式。

小结

获取列
	获取全部列 select * from chapter5;
	获取特定列 select id,class from chapter5;

获取行
	获取全部行 默认就是获取全部行
	获取前几行
		select * from chapter5 limit 5; # 获取前5行
		select * from chapter5 limit 2,3; # 获取第2行(从0开始)以后的三条数据
	获取满足特定条件的行 where
		select * from chapter5 where age=18 or class="一班"
	
行列同时获取
	select id,name from chapter5 where age=18 and class="一班";
	
插入一列固定值 
	直接在选择的列中写一个常量,那么整列都是这个值
	select id,class 'age<20' as label from chapter5 where age<20;
	
JSON列解析
	json_extract() 获取json列中的值
		select id,json_extract(score,'$.数学') as '数学成绩' from chapter5;
	json_keys() 查看json列中的键
		select id,json_keys(score) as "科目" from chapter5;

对结果进行排序
	order by 
	参数 asc(默认) desc
	select * from chapter5 order by age;
	select * from chapter5 order by class asc,age desc;
	
posted @ 2021-07-07 16:01  RowryCho  阅读(298)  评论(0编辑  收藏  举报