zoukankan      html  css  js  c++  java
  • 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;
    	
    
  • 相关阅读:
    oracle 数据库服务名怎么查
    vmware vsphere 6.5
    vSphere虚拟化之ESXi的安装及部署
    ArcMap中无法添加ArcGIS Online底图的诊断方法
    ArcGIS中字段计算器(高级计算VBScript、Python)
    Bad habits : Putting NOLOCK everywhere
    Understanding the Impact of NOLOCK and WITH NOLOCK Table Hints in SQL Server
    with(nolock) or (nolock)
    What is “with (nolock)” in SQL Server?
    Changing SQL Server Collation After Installation
  • 原文地址:https://www.cnblogs.com/Rowry/p/14981907.html
Copyright © 2011-2022 走看看