• sqlite条件查询语句where


    sqlite初步

    导入CSV数据

    查询是数据库中最频繁的操作,但学习查询指令,最起码要有可供查询的表格。比如现在有下面这些2022排名前20的国家GDP的数据,当然格式是csv的,我们要做的第一步就是将其转为sqilte格式。


    1,美国,美洲,254600,0.253204
    2,中国,亚洲,179600,0.178628
    3,日本,亚洲,42300,0.042075
    4,德国,欧洲,40700,0.040494
    5,印度,亚洲,33900,0.033662
    6,英国,欧洲,30700,0.030535
    7,法国,欧洲,27800,0.027674
    8,俄罗斯,欧洲,22400,0.022279
    9,加拿大,美洲,21400,0.021279
    10,意大利,欧洲,20100,0.019992
    11,巴西,美洲,19200,0.019094
    12,澳大利亚,大洋洲,16800,0.016661
    13,韩国,亚洲,16700,0.016559
    14,墨西哥,美洲,14100,0.014063
    15,西班牙,欧洲,14000,0.013897
    16,印尼,亚洲,13200,0.013117
    17,沙特阿拉伯,亚洲,11100,0.01102
    18,荷兰,欧洲,9911.15,0.009856
    19,土耳其,欧洲,9059.88,0.009009
    20,瑞士,欧洲,8077.06,0.008032


    这个十分容易,一个.import命令轻松搞定,但在导入之前,需要新建一个表格,以设定表格并规范数据类型

    C:\Users\Laser\Documents\00\0814>sqlite3 gdp.db
    sqlite> create table gdp(rank int, nation text, continent text, gdp real, ratio real);
    sqlite> .separator ','      -- 将分隔符设为逗号
    sqlite> .import gdp.csv gdp
    sqlite> .tables
    gdp
    sqlite> .mode column
    sqlite> select * from gdp;
    rank  nation  continent  gdp       ratio
    ----  ------  ---------  --------  --------
    1     美国      美洲      254600.0  0.253204
    2     中国      亚洲      179600.0  0.178628
    -- select * f会把表的所有内容打印出来
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    其中real为实数类型;.separator用于设置输入输出时的分隔符,如果不设置,可能会把导入的数据识别为一列。

    .mode column将sqlite命令行在屏幕上的输出设为column模式

    select最简单的用法就是查询列,比如现在只想输出国家和gdp两列,那么方法如下

    > select nation, gdp from gdp;
    nation  gdp
    ------  --------
    美国      254600.0
    中国      179600.0
    日本      42300.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    where

    没有where字句的select是没有灵魂的,有了where,select就可以自由地定制筛选条件,从而真正意义上做到查询,比如现在想知道GDP前20国家中,有几个亚洲国家,那么就可以像下面这样

    sqlite> select * from gdp where continent="亚洲";
    rank  nation  continent  gdp       ratio
    ----  ------  ---------  --------  --------
    2     中国      亚洲         179600.0  0.178628
    3     日本      亚洲         42300.0   0.042075
    5     印度      亚洲         33900.0   0.033662
    13    韩国      亚洲         16700.0   0.016559
    16    印尼      亚洲         13200.0   0.013117
    17    沙特阿拉伯   亚洲         11100.0   0.01102
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    即where后面可以接表达式,其支持的比较运算符中规中矩,大致如下

    运算符真值条件运算符真值条件
    ==, =, is左右相等!=, <>, not is左右不等
    >左大于右<左小于右
    >=, !<左大等于右<=, !>左小等于右

    除了比较运算,select也支持算术计算,加减乘除还有求余分别是±*/%,示例如下

    sqlite> select 1+1;
    1+1
    ---
    2
    
    • 1
    • 2
    • 3
    • 4

    如果想把所有gdp大于2万亿的亚洲国家都挑选出来,那么光是比较和算术运算符已经不够了,还得需要逻辑计算,sqlite中的与、或、非分别是and, or和not。

    sqlite> select nation from gdp where continent="亚洲" and gdp > 20000;
    nation
    ------
    中国
    日本
    印度
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果想查看gdp在1到2万亿的亚洲国家,那么使用between…and运算符就会比较便捷

    sqlite> select * from gdp where gdp between 10000 and 20000;
    rank  nation  continent  gdp      ratio
    ----  ------  ---------  -------  --------
    11    巴西      美洲         19200.0  0.019094
    12    澳大利亚    大洋洲        16800.0  0.016661
    13    韩国      亚洲         16700.0  0.016559
    14    墨西哥     美洲         14100.0  0.014063
    15    西班牙     欧洲         14000.0  0.013897
    16    印尼      亚洲         13200.0  0.013117
    17    沙特阿拉伯   亚洲         11100.0  0.01102
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其他运算符

    sqlite还支持位运算,包括与、或、非,分别是&, |, ~;以及二进制左移位和右移位<<, >>。

    通过运算符in,可以判断某个元素是否在某个集合中。

    sqlite> select * from gdp where nation in ("中国", "美国");
    rank  nation  continent  gdp       ratio
    ----  ------  ---------  --------  --------
    1     美国      美洲         254600.0  0.253204
    2     中国      亚洲         179600.0  0.178628
    
    • 1
    • 2
    • 3
    • 4
    • 5

    通过like和glob可以进行通配符匹配字符串,其中glob对大小写敏感。由于我们数据中都是汉字,所以可以查询一下结尾是“国”的国家GDP

    sqlite> select * from gdp where nation glob "?国";
    rank  nation  continent  gdp       ratio
    ----  ------  ---------  --------  --------
    1     美国      美洲         254600.0  0.253204
    2     中国      亚洲         179600.0  0.178628
    4     德国      欧洲         40700.0   0.040494
    6     英国      欧洲         30700.0   0.030535
    7     法国      欧洲         27800.0   0.027674
    13    韩国      亚洲         16700.0   0.016559
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    【快速阅读二】从OpenCv的代码中扣取泊松融合算子(Poisson Image Editing)并稍作优化
    信息学奥赛研究1:竞赛时间表、学习规划
    [Git]Git - GitHub远程仓库操作
    LearnOpenGL学习笔记——延迟着色法
    KF与EKF代码demo(几分钟就能让人人都会使用)
    Java高阶数据结构之红黑树
    如何让用户对产品上瘾_让用户养成习惯的产品逻辑
    PHP 通过 Redis 解决并发请求的操作问题
    ELK极简上手
    AUTOSAR中的Crypto Stack(一)--概述
  • 原文地址:https://blog.csdn.net/m0_37816922/article/details/132327060