• 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;
    	
    
  • 相关阅读:
    redis的基本操作
    python对txt的读写
    python random的练习
    python继承的练习
    python类和实例
    VS2019 自动代码补全功能
    GIT 删除操作
    vue-router 注意事项
    Vue中axios访问 后端跨域问题
    Vue2.0 搭配 axios
  • 原文地址:https://www.cnblogs.com/Rowry/p/14981907.html
Copyright © 2020-2023  润新知