sqlite条件查询语句where

文章目录

    • 导入CSV数据
    • 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会把表的所有内容打印出来

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

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

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

> select nation, gdp from gdp;
nation  gdp
------  --------
美国      254600.0
中国      179600.0
日本      42300.0

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

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

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

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

sqlite> select 1+1;
1+1
---
2

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

sqlite> select nation from gdp where continent="亚洲" and gdp > 20000;
nation
------
中国
日本
印度

如果想查看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

其他运算符

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

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

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

通过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

你可能感兴趣的:(数据库,sqlite,数据库,where,select,查询子句,运算符)