sqlite条件查询语句where

2023-09-22 09:00:00

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
更多推荐

JMM内存模型

JMM概念JMM:JavaMemoryModel(JAVA内存模型)。是Java语言中用于定义多线程并发访问共享内存的规范。它规定了多线程环境下,如何保证共享内存的一致性和可见性,以及如何协调多个线程之间的操作。主内存和工作内存(本地内存)JMM将内存划分为主内存和每个线程的工作内存。主内存是所有线程共享的内存,而每个

二级配电箱智能监测系统

随着现代电力工业的发展,电力系统的复杂性和安全性要求日益提高。二级配电箱作为电力系统的重要环节,其运行状态直接影响到电力供应和电力系统的稳定性。因此,对二级配电箱进行智能监测显得尤为重要。本文将探讨如何实现二级配电箱的智能监测。一、配电箱智能监测系统架构力安科技通过在配电箱/柜场所安装“智慧供配电综合探测器”前端物联探

检索技术核心学习总结

一、学习检索技术的必要性分析(一)关键原因分析学习检索技术(InformationRetrieval,IR)具有多种重要的原因,特别是在今天信息爆炸的数字化时代。总的来说,学习检索技术有助于提高信息处理和利用的效率,无论是个人生活还是在职业和学术领域中。这些技能可以增强信息搜索、分析和组织的能力,有助于更好地满足各种需

【eslint】屏蔽语言提醒

在JavaScript中,ESLint是一种常用的静态代码分析工具,它用于检测和提醒代码中的潜在问题和风格问题。有时候,在某些特定情况下,你可能希望临时屏蔽或禁用某些ESLint的提醒信息,以便消除不必要的警告或避免不符合项目规范的代码被标记为错误。例如,当你遍历一个dom数组,并想要修改每个item的dom元素的st

如何将办公文档导入到内容编辑区?

办公文档导入到内容编辑区功能让用户能够快速、轻松地将办公文档中的内容导入到内容编辑区中,以便进行进一步的编辑、排版和格式化。这个功能适用于多种场景,例如从Word文档、Excel表格或PowerPoint演示文稿中提取内容并将其导入到网页编辑器、博客平台或内容管理系统等。通过使用这个功能,用户可以省去手动复制和粘贴文本

通讯网关软件003——利用CommGate X2Mbt实现Modbus TCP访问OPC Server

本文介绍利用CommGateX2Mbt实现Modbus访问OPCServer。CommGateX2MBT是宁波科安网信开发的网关软件,软件可以登录到网信智汇(wangxinzhihui.com)下载。【案例】如下图所示,SCADA系统配置OPCServer,现在上位机需要通过Modbus主站软件来获SCADA的数据。【

Python的简单使用与应用

在当今互联网时代,网络爬虫成为了获取数据的重要工具之一。而使用代理IP进行爬虫操作,则是提高爬虫效率、绕过访问限制的利器。本文将向大家介绍Python代理IP爬虫的简单使用,帮助大家了解代理IP的原理、获取代理IP的方法,并探索其在实际应用中的无限可能。一、代理IP的原理和作用代理IP,顾名思义,即为代替本机IP进行网

计算机竞赛 深度学习 opencv python 公式识别(图像识别 机器视觉)

文章目录0前言1课题说明2效果展示3具体实现4关键代码实现5算法综合效果6最后0前言🔥优质竞赛项目系列,今天要分享的是🚩基于深度学习的数学公式识别算法实现该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🥇学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:4分创新点:4分🧿更多资料,项目分享:h

【计算机网络】Tcp详解

文章目录前言Tcp协议段格式TCP的可靠性面向字节流应答机制超时重传流量控制滑动窗口(重要)拥塞控制延迟应答捎带应答标志位具体标志位三次握手四次挥手粘包问题TCP异常情况listen的第二个参数前言前面我们学习了传输层协议Udp,今天我们一起学习Tcp,Tcp比Udp复杂,但可靠,非常多的场景需要这种可靠。Tcp协议段

循环神经网络——上篇【深度学习】【PyTorch】【d2l】

文章目录6、循环神经网络6.1、序列模型6.1.1、序列模型6.1.2、条件概率建模6.1.2、代码实现6.2、文本预处理6.2.1、理论部分6.2.2、代码实现6.3、语言模型和数据集6、循环神经网络6.1、序列模型6.1.1、序列模型序列模型主要用于处理具有时序结构的数据,**时序数据是连续的,**随着时间的推移,

2023/9/17总结

VuedefineOptions为什么要使用defineOptions在有<scriptsetup>之前如果需要定义propsemit可以很容易的添加一个与setup平级的属性但是用了<scriptsetup>后就不能这样做了setup属性也就没有了,就不能添加与其平级的属性为了解决这个问题引入了defineProps

热文推荐