SQLite 表达式

表达式是一个或多个值、运算符和计算值的 SQL函数的组合。

SQL表达式与公式类似,都写在查询语言中。您还可以使用特定的数据集来查询数据库。

SELECT语句的基本语法如下:

SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION | EXPRESSION];

假设现表中的数据如下:

sqlite> SELECT * FROM COM;
ID NAME AGE
---------- ---------- ----------
1 JXX 18
2 CLJ 19
3 WX 19
4 HY 21
5 CCC 19

SQLite-布尔表达式

SQLite 的布尔表达式在匹配单个值的基础上获取数据。语法如下:

sqlite> SELECT * FROM COM WHERE AGE = 19;
ID NAME AGE
---------- ---------- ----------
2 CLJ 19
3 WX 19
5 CCC 19

SQLite-数值表达式

这些表达式用来执行查询中的任何数学运算:

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name WHERE CONDITION] ;

在这里,numerical_expression 用于数学表达式或任何公式。下面是实例:

sqlite> SELECT (15+6) AS ADDITION
...> ;
21

有几个内置的函数,比如 avg()、sum()、count(),等等,执行被称为对一个表或者一个特定的表列的汇总数据计算。

sqlite> SELECT COUNT(*) AS "RECORDS" FROM COM;
5

SQLite-日期表达式

日期表达式返回当前系统日期和时间值,这些表达式将被用于各种数据操作。

sqlite> select datetime('now','localtime');
2018-09-26 12:33:09

SQLite Update 语句

UPDATE 查询用于修改表中已有的记录。可以使用带有WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。

大有 WHERE 子句的UPDATE查询的基本语法如下:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

可以使用 AND 或 OR 运算符来结合 N 个数量的条件。

假设COM表中有如下数据:

ID          NAME        AGE
---------- ---------- ----------
1 JXX 18
2 CLJ 19
3 WX 19
4 HY 21
5 CCC 19

下面是一个实例,她会更新ID为1的客户地址:

sqlite> update COM set AGE = 19 where ID=1;
sqlite> select * from COM;
ID NAME AGE
---------- ---------- ----------
1 JXX 19
2 CLJ 19
3 WX 19
4 HY 21
5 CCC 19

如果想修改COM表中的 AGE 和 NAME 列的所有值,则不需要使用 WHERE子句:

sqlite> update COM set AGE = 19,NAME="jxx";
sqlite> select * from COM;
ID NAME AGE
---------- ---------- ----------
1 jxx 19
2 jxx 19
3 jxx 19
4 jxx 19
5 jxx 19

SQLite Delete 语句

SQLite 的DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都将被删除。

带有 WHERE 子句的 DELETE 查询的基本语法如下:

DELETE FROM table_name
WHERE [condition];

可以使用 AND 或 OR 运算符来结合 N 个数量的条件

实例;

假设表中数据如下:

ID          NAME        AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
5 wx 19
6 xy 19

删除 ID = 5 的数据:

sqlite> delete from COM where ID =5;
sqlite> select * from COM;
ID NAME AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
6 xy 19

如果不使用 WHERE 子句,表中的数据将会全部删除;

sqlite> delete from COM;

SQLite Like 子句

LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真 (True) ,也就是1。这里有两个通配符与 LIKE 运算符一起使用:

  • 百分号:(%)
  • 下划线:(_)

百分号(%)代表零个、一个或多个数字或字符。

下划线(_)代表一个单一的数字或字符。

这些符号可以被组合使用。

基本语法如下:

SELECT column_list
FROM table_name
WHERE column LIKE 'XXXX%' or SELECT column_list
FROM table_name
WHERE column LIKE '%XXXX%' or SELECT column_list
FROM table_name
WHERE column LIKE 'XXXX_' or SELECT column_list
FROM table_name
WHERE column LIKE '_XXXX' or SELECT column_list
FROM table_name
WHERE column LIKE '_XXXX_'

可以使用 AND 或 OR 运算符来结合 N 个数量的条件。(注:XXXX 可以是任何数字或字符串值)

下面一些实例演示了带有 '%' 和 '_' 运算符的 LIKE 子句不同的地方:

语句 描述
WHERE SALARY LIKE '200%' 查找以 200 开头的任意值
WHERE SALARY LIKE '%200%' 查找任意位置包含 200 的任意值
WHERE SALARY LIKE '_00%' 查找第二位和第三位为 00 的任意值
WHERE SALARY LIKE '2_%_%' 查找以 2 开头,且长度至少为 3 个字符的任意值
WHERE SALARY LIKE '%2' 查找以 2 结尾的任意值
WHERE SALARY LIKE '_2%3' 查找第二位为 2,且以 3 结尾的任意值
WHERE SALARY LIKE '2___3' 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值

实例,表中的数据如下:

ID          NAME        AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
6 xy 19
7 long 19
8 OuYang 18
9 Star-Man 19

开始查找:

sqlite> select * from COM where AGE like '2%';
ID NAME AGE
---------- ---------- ----------
4 hy 21
sqlite> select * from COM where NAME like 'c%';
ID NAME AGE
---------- ---------- ----------
2 clj 19
3 ccc 19
sqlite> select * from COM where AGE like '2_';
ID NAME AGE
---------- ---------- ----------
4 hy 21
sqlite> select * from COM where NAME like '%-%';
ID NAME AGE
---------- ---------- ----------
9 Star-Man 19

SQLite Glob 子句

GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(True),也就是1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。

  • 星号(*)
  • 问号(?)

星号(*)代表零个、一个或多个数字或字符。

问号(?)代表一个单一的数字或字符。

这些符号可以组合使用。

* 和 ? 的基本语法如下:

SELECT FROM table_name
WHERE column GLOB 'XXXX*' or SELECT FROM table_name
WHERE column GLOB '*XXXX*' or SELECT FROM table_name
WHERE column GLOB 'XXXX?' or SELECT FROM table_name
WHERE column GLOB '?XXXX' or SELECT FROM table_name
WHERE column GLOB '?XXXX?' or SELECT FROM table_name
WHERE column GLOB '????'

可以使用 AND 或 OR 运算符来结合 N 个数量的条件。(注:XXXX 可以是任何数字或字符串值)

下面是 GLOB 运算符中 '*' 和 '?' 的不同:

WHERE SALARY GLOB '200*' 查找以 200 开头的任意值
WHERE SALARY GLOB '*200*' 查找任意位置包含 200 的任意值
WHERE SALARY GLOB '?00*' 查找第二位和第三位为 00 的任意值
WHERE SALARY GLOB '2??' 查找以 2 开头,且长度至少为 3 个字符的任意值
WHERE SALARY GLOB '*2' 查找以 2 结尾的任意值
WHERE SALARY GLOB '?2*3' 查找第二位为 2,且以 3 结尾的任意值
WHERE SALARY GLOB '2???3' 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值

SQLite Limit 语句

SQLite 的 Limit 子句用于限制SELECT 语句返回的数据数量。

带有 LIMIT 子句的 SELECT 语句的基本语法如下:

SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows]

下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法:

SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows] OFFSET [row num]

SQLite 引擎将返回从下一行开始直到给定的 OFFSET 为止的所有行。

实例,假设 COM 表中有如下数据;

ID          NAME        AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
6 xy 19
7 long 19
8 OuYang 18
9 Star-Man 19

LIMIT 限制输出:

sqlite> select * from COM limit 6;
ID NAME AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
6 xy 19
7 long 19

但是,在某些情况下,可能需要从一个特定的偏移开始提取记录,比如从第三位开始提取3个数据:

sqlite> select * from COM limit 3 offset 2;
ID NAME AGE
---------- ---------- ----------
3 ccc 19
4 hy 21
6 xy 19

SQLite Order By 子句

ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。

ORDER BY 子句 的基本语法:

SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

可以在 ORDER BY 子句中使用多个列。确保使用的排序列在列清单中。

下面的命令将按照ID 升序排序:

sqlite> SELECT * FROM COM ORDER BY ID ASC;

下面的命令将按照 NAME 降序排序:

sqlite> SELECT * FROM COM ORDER BY NAME DESC;

SQLite Group By 子句

GROUP BY 用于 SELECT 语句一起使用,来对相同的数据进行分组。

在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。

GROUP BY 子句的基本语法。GROUP BY 子句 必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前:

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

可以在 GROUP BY 子句中使用多列,确保使用的分组列在列清单中。

假设 COM 表的数据如下:

ID          NAME        AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
6 xy 19
7 long 19
8 OuYang 18
9 Star-Man 19
5 wx 19

如果你想了解每个人的年龄:

sqlite> select NAME,AGE from COM group by NAME;
NAME AGE
---------- ----------
OuYang 18
Star-Man 19
ccc 19
clj 19
hy 21
jxx 19
long 19
wx 19
xy 19

ORDER BY 子句和 GROUP BY 子句一起使用:

sqlite> select NAME,AGE from COM group by NAME order by NAME asc;
NAME AGE
---------- ----------
OuYang 18
Star-Man 19
ccc 19
clj 19
hy 21
jxx 19
long 19
wx 19
xy 19

SQLite Having 子句

HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。

WHERE 子句在所选定列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。。

HAVING 子句在 SELECT 查询中的位置:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

在一个查询中,HAVING 子句必须放在 GROUP BY 子句之后,必须放在 ORDER BY 子句之前。语法:

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

假设表中数据如下:

ID          NAME        AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
6 xy 19
7 long 19
8 OuYang 18
9 Star-Man 19
5 ccc 19

显示名称计数小于2的所有记录:

sqlite> select * from COM group by name having count(name) <2;
ID NAME AGE
---------- ---------- ----------
8 OuYang 18
9 Star-Man 19
2 clj 19
4 hy 21
1 jxx 19
7 long 19
6 xy 19

名称计数大于等于2的所有记录:

sqlite> select * from COM group by name having count(name) >= 2;
ID NAME AGE
---------- ---------- ----------
3 ccc 19

 SQLite Distinct 关键字

SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有的重复的记录。并获取唯一一次记录。

有可能出现一种情况,在一个表中有多个重复的记录。当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。

用于消除重复记录的 DISTINCT 关键字的基本语法如下:

SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]

假设COM 数据如下:

ID          NAME        AGE
---------- ---------- ----------
1 jxx 19
2 clj 19
3 ccc 19
4 hy 21
6 xy 19
7 long 19
8 OuYang 18
9 Star-Man 19
5 ccc 19

SELECT查询将会返回重复NAME 的记录,可以在SELECT 查询中使用 DISTINCT 关键字:

sqlite> select distinct name from COM;
NAME
----------
jxx
clj
ccc
hy
xy
long
OuYang
Star-Man

SQLite3学习笔记(3)的更多相关文章

  1. SQLite3学习笔记----创建数据库的两种方式

    今天研究学习SQLite,刚开始创建数据库,就遇到了一个坑,是自己粗心了,特记录一下. 实验环境: OS:Ubuntu18.04 创建数据库名称:test.db 实验步骤: 1.检查是否已经安装了SQ ...

  2. SQLite3 学习笔记

    1.数据存储方式 Plist(NSArray\NSDictionary) Preference(偏好设置\NSUserDefaults) NSCoding(NSKeyedArchiver\NSkeye ...

  3. SQLite3学习笔记(1)

    命令: DDL-数据定义: CREATE -- 创建一个新的表,一个表的视图,或者数据库中的其他对象 ALTER -- 修改数据库中的某个已有的数据对象,比如一个表 DROP -- 删除整个表,或者表 ...

  4. python sqlite3学习笔记

    1.sqlite3.connect()参数说明 self.connect = sqlite3.connect(db_name,timeout=3,isolation_level=None,check_ ...

  5. SQLite3学习笔记(2)

      SQLite 创建表 SQLite 的CREATE TABLE 语句用于在任何指定的数据库创建一个新表. 创建新表,涉及到命名表.定义列及每一行的数据类型. CREATE TABLE 的基本语法如 ...

  6. 树莓派学习笔记——交叉编译练习之SQLite3安装

    0.前言     本博文可能并没有太多使用价值.不过为了练习而练习.在树莓派上使用SQLite有非常多的方法,安装的方法也有非常多.     [1]假设使用Python,那么不必安装SQLite由于P ...

  7. Django 学习笔记之四 QuerySet常用方法

    QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...

  8. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  9. Django学习笔记(三)—— 型号 model

    疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...

随机推荐

  1. Docker二

    Docker生成镜像的两种方式 有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像 两种方式: 更新镜像:使用docker commit命令 构建镜像:使 ...

  2. 【算法】矩阵填数,深度优先搜索(DFS),Pascal改C语言

    面向对象的上机实验 题目 以下列方式向 5*5 矩阵中填入数字.设数字i(1=<i<=25),则数字i+1 的坐标位置应为(E, W).(E, W)可根据下列关系由(x,y)算出: 1)( ...

  3. 澎湃新闻速览版UWP 隐私策略

    ThePaper UWP 此为 澎湃新闻速览版 的隐私策略,本隐私策略内容会不定期更新,以最新内容为主. 若您已经阅读并了解以下内容后,并继续使用该软件,即表示您已同意该协议. 内容: 这是澎湃新闻的 ...

  4. 剑指offer1: 组类型——二维数组中的查找(给定一个数字,查找是否在该数组中)

    1. 思路: 缩小范围 2. 方法: (1)要查找的数字等于数组中的数字,结束查找过程: (2)要查找的数字小于数组中的数字,去除该数字右边的数字,在剩下的数字里查找: (3)要查找的数字大于数组中的 ...

  5. Jobs(三) HTML的form表单提交中文后,后台取出乱码的问题

    解决form表单中提取的中文在后台乱码的问题有两种情况: form表单以GET方式提交: form表单以POST方式提交 一. 解决以GET方式提交的中文乱码问题,可以更改Tomcat服务器的配置文件 ...

  6. zookeeper客户端KeeperErrorCode = ConnectionLoss异常问题排查历险记

    经过线报,说前方应用有异常,导致了可用性变差.咦!讨厌的异常,抛异常是程序猿最讨厌的事情之一. 经过收集异常信息如下 ​ ​ 2019-06-24 10:57:41.806 ERROR [hades- ...

  7. 《深入理解 Java 虚拟机》学习 -- Java 内存模型

    <深入理解 Java 虚拟机>学习 -- Java 内存模型 1. 区别 这里要和 JVM 内存模型区分开来: JVM 内存模型是指 JVM 内存分区 Java 内存模型(JMM)是指一种 ...

  8. SMTP实现发送邮箱1

    #include "stdafx.h" #include <iostream> #include <WinSock2.h> using namespace ...

  9. TCP协议探究(三):RTT、滑动窗口和阻塞处理

    1 RTT算法 1.1 概述 上一节说了重传机制需要设置一个重传超时值(RTO,Retransmission TimeOut),RTO设长了,重发太慢:设短了,可能导致包没有丢,就重发了,可能导致雪崩 ...

  10. Oracle导入数据后中文乱码的解决方法

    解决方法: 方法一. 1.在运行命令行输入regedit,打开注册表编辑器 2.找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1 3.看N ...