admin 管理员组

文章数量: 1184232


2023年12月24日发(作者:horos教程)

易语言外部数据库sqlite3教程

===========================================================

第一部分 sqlite基础

-----------------------------------------------------------

1、什么是sqliet

SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。

SQLite与其他SQL数据库不同,SQLite没有单独的服务器进程。 它直接读取和写入普通磁盘文件。 具有多个表,索引,触发器和视图的完整SQL数据库包含在单个磁盘文件中。

-----------------------------------------------------------

2、为什么要用 SQLite?

➢ 不需要一个单独的服务器进程或操作的系统(无服务器的)。

➢ SQLite 不需要配置,这意味着不需要安装或管理。

➢ 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。

➢ SQLite 是非常小的,是轻量级的,完全配置时小于

400KiB,省略可选功能配置时小于250KiB。

➢ SQLite 是自给自足的,这意味着不需要任何外部的依赖。

➢ SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。

➢ SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。

➢ SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的

API。

➢ SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和

Windows(Win32, WinCE, WinRT)中运行。

-----------------------------------------------------------

3、常用易语言单机的、免费、轻量级数据库比较

易语言自带数据库易数据库可以说不能称为数据库,它只是“表”,而且还是单张表,所以直接PASS掉。

大部分人会用access,其实Access数据库本身有很多的问题:性能不行;数据不安全,用户可以直接用Access打开数据库文件进行数据修改,即使加密后都可以直接破解;Access的数据量一大,文件本身的体积就异常庞大等因素。

SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。

SQLite就是Access理想的替代品。

-----------------------------------------------------------

4、sqlite3数据类型

SQLite存储类比数据类型更通用一些。类型比其他数据库的数据类型少,但是更实用些。

➢ SQLite 存储类

每个存储在 SQLite 数据库中的值都具有以下存储类之一:

存储类

NULL

INTEGER

(整数型)

值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。

REAL

TEXT

(文本型)

BLOB(二进制

(近似双精度浮点型)

值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。

值是一个 blob 数据,完全根据它的输入存储。

描述

值是一个 NULL 值。

值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。

SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型。

➢ SQLite 亲和(Affinity)类型(近似)

SQLite支持列的亲和类型概念。任何列仍然可以存储任何类型的数据,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式。SQLite目前的版本支持以下五种亲缘类型:

亲和类型

TEXT

描述

数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。此列可使用存储类为NULL,TEXT或BLOB来存储所有数据。

NUMERIC

(数字、数值

当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的

新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。此列可包含使用所有五个存储类的值。也就是可以存上面所列的五种类型。

INTEGER

整数型

对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。它的行为与带有转换表达式异常的具有数字近似的列相同。

REAL 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。它的行为类似于具有数字近似的列(除了它将整数值强制以浮点表示)

NONE 不做任何的转换,直接以该数据所属的数据类型进行存储。 具有近似性NONE的列不会将一个存储类转为另一个存储类型

➢ SQLite近似和类型名称

以下是可以在创建SQLite表时使用的各种数据类型名称的列表。

数据类型

INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG

INT INT2 INT8

CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE

CHARACTER(70) NVARCHAR(100) TEXT CLOB

BLOB - 未指定数据类型

REAL DOUBLE DOUBLE PRECISION FLOAT

NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME

相应的近似类型

INTEGER

TEXT

NONE

REAL

NUMERIC

➢ 日期和时间数据类型

在SQLite中,没有单独的类型来存储日期和时间。 但是可以将日期和时间存储为TEXT,REAL或INTEGER值。

存储类

TEXT

REAL

INTEGER

日期格式

它以“yyyy-mm-dd hh:mm:” 格式指定日期

它规定了从公元前4714年11月24日在格林威治中午以后的天数。

它指定从1970-01-01 00:00:00 utc开始的秒数。

附:易语言基本数据类型

基本数据类型有6种:数值型、逻辑型、日期时间型、文本型、字节集型、子程序指针型。

数值型又包括:字节型、短整数型、整数型、长整数型、小数型、双精度小数型。

-----------------------------------------------------------

5、sqlite命令大全

SQLite命令与SQL命令类似。 有三种类型的SQLite命令:

➢ DDL数据定义语言

数据定义语言中主要有三个命令:

• CREATE建表,数据库中的表或其他对象的视图。

• ALTER:此命令用于修改现有的数据库对象,如表。

• DROP:DROP命令用于删除整个表,数据库中的表或其他对象的视图。

➢ DML数据操作语言

数据操作语言中主要有三个命令:

• INSERT:此命令用于创建记录。

• UPDATE:用于修改记录。

• DELETE:用于删除记录。

➢ DQL数据查询语言

• SELECT:此命令用于从一个或多个表中检索某些记录。

6、sqlite点命令

SQLite 编程人员所使用的简单却有用的命令。这些命令被称为

SQLite 的点命令,这些命令的不同之处在于它们不以分号 ; 结束。

➢ 命令及其描述如下表所示:

命令

.backup ?db? file

.bail on/off

.databases

.dump ?table?

.echo on/off

.exit

.explain on/off

.header(s) on/off

.help

.import file table

.indices ?table?

.load file ?entry?

.log file/off

.mode mode

描述说明

备份数据库(默认“main”)到文件中

遇到错误后停止,默认为off

附件数据库的列表名称和文件

以sql文本格式转储数据库。如果指定表,则只转储表匹配像模式表。

打开或关闭echo命令

退出sqlite提示符

转向输出模式适合说明on/off。如没有参参数,则它为on。

打开或关闭标题的显示

显示指定帮助消息

将数据从文件导入表

显示所有索引的名称。如果指定表,则只显示匹配的表的索引,如模式表。

加载扩展库

打开或关闭日志记录。文件可以是stderr/stdout

设置输出模式

命令

.nullvalue string

.output filename

.output stdout

.

.prompt main continue

.quit

.read filename

.schema ?table?

.separator string

.show

.stats on/off

.tables ?pattern?

.timeout ms

.width num num

.timer on/off

打印字符串代替空值

发送输出到文件名

发送输出到屏幕

打印文字字符串

替换标准提示

退出sqlite提示符

在文件名中执行sql

描述说明

显示创建语句。如果指定表,则只显示与模式表匹配的表。

更改分隔符由输出模式和.import使用

显示各种设置的当前值

打开或关闭统计信息

列出匹配类似模式的表的名称

尝试打开锁定的表毫秒

设置“列”模式的列宽

打开或关闭cpu定时器测量

个人认为,因为我们在易语言里直接操作sqlite数据库,所以用点命令还是很少的,知道几个常用的即可。

---------------------------------------------------------

7、sqlite语法大全

SQLite 是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门。

大小写敏感性

有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。

SQLite 注释是附加的注释,可以在 SQLite 代码中添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他

SQL 语句的中间,但它们不能嵌套。

SQL 注释以两个连续的 "-" 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。

您也可以使用 C 风格的注释,以 "/*" 开始,并扩展至下一个

"*/" 字符对或直到输入结束,以先到者为准。SQLite的注释可以跨越多行。

sqlite>.help -- This is a single line comment

所有的 SQLite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。

---------------------------------------------------------

8、sqlite运算符

➢ Sqlite算术运算符

假设变量 a=10,变量 b=20,则:

运算符

+

描述

加法 - 把运算符两边的值相加

实例

a + b 将得到 30

- 减法 - 左操作数减去右操作数 a - b 将得到 -10

* 乘法 - 把运算符两边的值相乘 a * b 将得到 200

/ 除法 - 左操作数除以右操作数 b / a 将得到 2

% 取模 - 左操作数除以右操作数后得到的余数 b % a will give 0

➢ Sqlite比较运算符

下表中列出了SQLite中的比较运算符。 在这个表中,有两个变量“a”和“b”,它们的值分别是50和100。

运算符 描述

== 检查两个操作数的值是否相等,如果相等则条件为真。

实例

(a == b) 不为真。

= 检查两个操作数的值是否相等,如果相等则条件为真。 (a = b) 不为真。

!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (a != b) 为真。

<> 检查两个操作数的值是否相等,如果不相等则条件为真。 (a <> b) 为真。

> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (a > b) 不为真。

< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (a < b) 为真。

>= 检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。 (a >= b) 不为真。

<= 检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。 (a <= b) 为真。

!< 检查左操作数的值是否不小于右操作数的值,如果是则条件为真。 (a !< b) 为假。

!> 检查左操作数的值是否不大于右操作数的值,如果是则条件为真。 (a !> b) 为真。

➢ Sqlite逻辑运算符

运算符

AND

描述

AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。

BETWEEN BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值。

EXISTS EXISTS 运算符用于在满足一定条件的指定表中搜索行的存在。

IN IN 运算符用于把某个值与一系列指定列表的值进行比较。

NOT IN IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。

LIKE LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。

GLOB GLOB 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与

LIKE 不同之处在于,它是大小写敏感的。

NOT NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT

BETWEEN、NOT IN,等等。它是否定运算符。

OR OR 运算符用于结合一个 SQL 语句的 WHERE 子句中的多个条件。

IS NULL NULL 运算符用于把某个值与 NULL 值进行比较。

IS IS 运算符与 = 相似。

IS NOT IS NOT 运算符与 != 相似。

|| 连接两个不同的字符串,得到一个新的字符串。

UNIQUE UNIQUE 运算符搜索指定表中的每一行,确保唯一性(无重复)。

➢ Sqlite位运算符,在易语言做的小项目中,用不到,PASS吧,下表中列出了 SQLite 语言支持的位运算符。假设变量

A=60,变量 B=13,则:

运算符 描述

& 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。

实例

(A & B) 将得到 12,即为 0000

1100

| 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。

(A | B) 将得到 61,即为 0011

1101

~ 二进制补码运算符是一元运算符,具有"翻转"位效应,即0变成1,1变成0。

(~A ) 将得到 -61,即为 1100

0011,一个有符号二进制数的补码形式。

<< 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。

A << 2 将得到 240,即为 1111

0000

>> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。

A >> 2 将得到 15,即为 0000

1111

===========================================================

第二部分 sqlite数据库和表的操作

-----------------------------------------------------------

1、sqlite创建数据库

在SQLite中,sqlite3命令用于创建新的数据库。

语法

sqlite3

上面的命令将在当前目录下创建一个文件 。该文件将被 SQLite 引擎用作数据库。如果您已经注意到 sqlite3 命令在成功创建数据库文件之后,将提供一个 sqlite> 提示符。

一旦数据库被创建,您就可以使用 SQLite 的 .databases 命令来检查它是否在数据库列表中。

-----------------------------------------------------------

2、sqlite附加数据库

假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite 的 ATTACH DATABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 SQLite 语句将在附加的数据库下执行。(个人理解,当前打开数据库A时,又当操作数据库B,这时就可以把数据库B附加进来,就不需要退出A再进B,再退出B,再进A这样麻烦了)

语法

ATTACH DATABASE 'DatabaseName' As 'Alias-Name';

注意:如果数据库不存在,上述语法也将创建一个数据库,否则它只会将数据库文件名与逻辑数据库Alias-Name相连接。(前面是实实在在的数据库文件名,后面是虚拟的逻辑数据库表,或是说给定的一个“瓶子”用来装数据库的)

如果想附加一个现有的数据库 ,则 ATTACH

DATABASE 语句将如下所示:

sqlite> ATTACH DATABASE '' as 'TEST';

使用 SQLite .database 命令来显示附加的数据库。

sqlite> .database

seq name file

--- --------------- ----------------------

0 main /home/sqlite/

2 test /home/sqlite/

-----------------------------------------------------------

3、sqlite分离数据库

SQLite的 DETACH DTABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的。如果同一个数据库文件已经被附加上多个别名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效。您无法分离 main 或 temp 数据库。

如果数据库是在内存中或者是临时数据库,则该数据库将被摧毁,且内容将会丢失。

SQLite 的 DETACH DATABASE 'Alias-Name' 语句的基本语法如下:

DETACH DATABASE 'Alias-Name';

在这里,'Alias-Name' 与您之前使用 ATTACH 语句附加数据库时所用到的别名相同。

-----------------------------------------------------------

4、sqlite创建表

在SQLite中,CREATE TABLE语句用于创建新表。 在创建表时,需要为表指定一个名称并定义表的每列和数据类型。

下面是一个实例,它创建了一个 COMPANY 表,ID 作为主键,NOT

NULL 的约束表示在表中创建纪录时这些字段不能为 NULL:

sqlite> CREATE TABLE COMPANY(

ID INT PRIMARY KEY NOT NULL,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL

);

说明:--(int基本整型,PRIMARY KEY定义主键,not null不为空),在实例中用到几种数据类型INT-整数数据类型、char-指针型数据(文本)、real-浮点型类型(浮点数字)

VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。CHAR(n):长度固定为n的字串,n不能超过 254。

您可以使用 SQLIte 命令中的 .tables 命令来验证表是否已成功创建,该命令用于列出附加数据库中的所有表。

sqlite>.tables

COMPANY DEPARTMENT

您可以使用 SQLite .schema 命令得到表的完整信息,如下所示:

sqlite>.schema COMPANY

CREATE TABLE COMPANY(

ID INT PRIMARY KEY NOT NULL,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL

);

-----------------------------------------------------------

5、删除表

SQLite 的 DROP TABLE 语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。

使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永远丢失。

DROP TABLE 语句的基本语法如下。您可以选择指定带有表名的数据库名称,如下所示:

DROP TABLE database__name;

-----------------------------------------------------------

6、sqlite插入语句

SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。

INSERT INTO 语句有两种基本语法,如下所示:

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]

VALUES (value1, value2, value3,...valueN);

在这里,column1, column2,...columnN 是要插入数据的表中的列的名称。

如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。SQLite 的 INSERT INTO 语法如下:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

 看例程中发现,文本类的必须是用单引号括起来。与易语言要求相同。

-----------------------------------------------------------

7、sqlite检索、查找语句

SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。

SQLite 的 SELECT 语句的基本语法如下:

SELECT column1, column2, columnN FROM table_name;

在这里,column1, 是表的字段,他们的值即是您要获取的。如果您想获取所有可用的字段,那么可以使用下面的语法:

SELECT * FROM table_name;

-----------------------------------------------------------

8、sqlite更新语句

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

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

UPDATE table_name

SET column1 = value1, column2 = , columnN = valueN

WHERE [condition];

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

-----------------------------------------------------------

9、sqlite删除语句

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

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

DELETE FROM table_name

WHERE [condition];

===========================================================

第三部分 子句与条件

-----------------------------------------------------------

1、sqlite的where子句

SQLite WHERE子句通常与SELECT,UPDATE和DELETE语句一起使用,以便作为指定条件从一个表或多个表中获取数据。

如果条件满足或正确,则返回表中的特定值。 可使用WHERE子句来过滤记录并仅获取满足指定条件的记录。WHERE子句还用于过滤记录并仅获取特定数据。

SELECT column1, column2, columnN

FROM table_name

WHERE [condition]

-----------------------------------------------------------

2、sqlite的and和or子句

AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。使用 AND 运算符时,只有当所有条件都为真(true)时,整个条件为真(true)。例如,只有当 condition1 和

condition2 都为真(true)时,[condition1] AND [condition2]

为真(true)。

OR 运算符也用于结合一个 SQL 语句的 WHERE 子句中的多个条件。使用 OR 运算符时,只要当条件中任何一个为真(true)时,整个条件为真(true)。例如,只要当 condition1 或

condition2 有一个为真(true)时,[condition1] OR

[condition2] 为真(true)。

SQLite AND运算符通常与SELECT,UPDATE和DELETE语句一起使用以组合多个条件。 它是一个联合运算符,OR运算符始终与WHERE子句一起使用,如果两个条件之一为真,则完整条件为真。

-----------------------------------------------------------

3、sqlite like子句

SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:百分号%和下划线_。

➢ 百分号(%)表示零个,一个或多个数字或字符。

➢ 下划线(_)表示一个数字或字符。

SELECT FROM table_name

WHERE column LIKE 'XXXX%'

在这些示例中,在WHERE语句的LIKE子句中,在’FEES‘字段上使用’%‘和’_‘运算符,对应结果如下:

语句

Where FEES like '200%'

Where FEES like '%200%'

Where FEES like '_00%'

Where FEES like '2_%_%'

Where FEES like '%2'

Where FEES like '_2%3'

查找以200开头的任何值

查找包含200开头的任何值

查找第二个位置和第三个位置是0的任何值

查找以2开头并且长度至少为3个字符的值

查找以2结尾的任何值

查找任何在第二个位置值为2,并以3结尾的值

结果说明

语句

Where FEES like '2___3'

结果说明

查找以2开头,以3结尾的一个五位数字值

-----------------------------------------------------------

4、sqlite GLOB子句

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

星号(*): 符号表示零个或多个数字或字符。

问号(?): 符号表示单个数字或字符。

在下面这些示例中,WHERE语句具有不同的BLOB子句,带有’*‘和’?‘运算符:

语句

WHERE FEES GLOB '200*'

WHERE FEES GLOB '*200*'

WHERE FEES GLOB '?00*'

WHERE FEES GLOB '2??'

WHERE FEES GLOB'*2'

WHERE FEES GLOB '?2*3'

WHERE FEES GLOB '23'

查找以200开头的任何值

查找包含200的任何值

查找在第二和第三个位置是00的任何值

查找以2开头并且长度至少为3个字符的值

查找以2结尾的任何值

查找具有第二个位置是2并以3结尾的任何值

查找以2开头并以3结尾的五位数字的任何值

描述

 特别注意:

like不区分大小写, glob区分大小写

like: 百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。

glob: 星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。

-----------------------------------------------------------

5、sqlite limit子句

SQLite 的 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]

例如SELECT * FROM STUDENT LIMIT 3;这句只返回3条结果显示

OFFSET用于不从表中检索偏移记录。 在某些情况下,必须从某一点开始检索记录:

从student表中的第2位开始选择2条记录。

SELECT * FROM STUDENT LIMIT 2 OFFSET 1;

-----------------------------------------------------------

6、sqlite order by子句(排序)

SQLite ORDER BY子句用于根据一个或多个列对所获取的数据按升序或降序进行排序(排序)。

SELECT column-list

FROM table_name

[WHERE condition]

[ORDER BY column1, column2, .. columnN] [ASC | DESC];

(ASC升序、DESC降序)

例如:

从student表中选择所有记录,按fees字段升序排序:

SELECT * FROM student ORDER BY fees ASC;

从student表获取所有数据,并按ADDRESS和FEES对结果进行降序排序:

SELECT * FROM student ORDER BY address, fees DESC;

-----------------------------------------------------------

7、sqlite group by子句(合并分组)

SQLite 的 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, lumnN

ORDER BY column1, lumnN

例如SELECT NAME, SUM(FEES) FROM STUDENT GROUP BY NAME;

汇总name相同的fees之和。比如表格这样设计,姓名A、语文、分数;A、数学、分数;A、英语、分数。这个时候就可以挡出A这个人总分数了。

-----------------------------------------------------------

8、sqlite having 子句

HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。WHERE 子句在所选列上设置条件,而 HAVING 子句则在由

GROUP BY 子句创建的分组上设置条件。

语法:下面是 HAVING 子句在 SELECT 查询中的位置及语法

SELECT column1, column2

FROM table1, table2

WHERE [ conditions ]

GROUP BY column1, column2 合并

HAVING [ conditions ]

ORDER BY column1, column2 排序

比如:

SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;

将显示姓名小于两个的信息

-----------------------------------------------------------

9、sqlite distinct 子句(过滤重复)

SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。有可能出现一种情况,在一个表中有多个重复的记录。当提取这样的记录时,

DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。

SELECT DISTINCT column1, column2,.....columnN

FROM table_name

WHERE [condition]

比如:

SELECT DISTINCT name FROM COMPANY;

-----------------------------------------------------------

10、sqlite unions (联合、合并)

SQLite的 UNION 子句/运算符用于合并两个或多个 SELECT

语句的结果,不返回任何重复的行。(简单理解,就是把两个表内容连接起来,或更好理解为多表查询,同时显示两表的数据)

为了使用 UNION,每个 SELECT 被选择的列数必须是相同的,相同数目的列表达式,相同的数据类型,并确保它们有相同的顺序,但它们不必具有相同的长度。

语法:

SELECT column1 [, column2 ]

FROM table1 [, table2 ]

[WHERE condition]

UNION

SELECT column1 [, column2 ]

FROM table1 [, table2 ]

[WHERE condition]

-----------------------------------------------------------

10、sqlite unions all(联合、合并,重复列也显示)

SQLite UNION ALL运算符用于组合两个或多个SELECT语句的结果,但是不忽略重复的行(含有重复的行记录)。

在SQLite UNION ALL中,查询结果表还包括重复值。 其它规则适用于Union操作符。

语法

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions]

UNION ALL

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions];

-----------------------------------------------------------

11、sqlite in子句

SQLite IN运算符用于确定值是否匹配列表或子查询中的任何值。 IN运算符根据表达式是否匹配值列表中的任何值,返回true或false。要查询非列表中的值匹配,请使用NOT IN运算符。IN运算符的语法如下:

expression [NOT] IN (value_list|subquery);

比如查询ID为1、3、5的信息

SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID IN(1,3,5);

上面的例子与

SELECT ID,AGE,NAME,ADDRESS FROM student WHERE ID = 1 OR ID=3 OR ID=5;

执行效果是一样的。

===========================================================

第三部分 sqlite常用函数

-----------------------------------------------------------

1、常用函数

SQLite 有许多内置函数用于处理字符串或数字数据。下面列出了一些有用的 SQLite 内置函数,且所有函数都是大小写不敏感,这意味着您可以使用这些函数的小写形式或大写形式或混合形式。

序号

1

2

3

4

5

6

7

8

9

10

11

函数

MIN()函数

MAX()函数

AVG()函数

COUNT()函数

SUM()函数

RANDOM()函数

ABS()函数

UPPER()函数

LOWER()函数

LENGTH()函数

sqlite_version()函数

描述说明

SQLite MIN()函数用于查询某列的最低(最小)值。

SQLite MAX()函数用于查询某列的最高(最大)值。

SQLite MAX()函数用于查询某列的平均值。

SQLite COUNT()函数用于计算数据库表中的行数。

SQLite SUM()函数用于查询指定数字列的总数(相加的总和)。

SQLite RANDOM()函数返回-9223372与+9223372之间的伪随机整数。

SQLite ABS()函数用于获取给定参数的绝对值。

SQLite UPPER()函数用于将给定字符串参数转换为大写字母。

SQLite LOWER()函数用于将给定字符串参数转换为小写字母。

SQLite LENGTH()函数用于获取给定字符串的长度。

SQLite sqlite_version()函数用于获取SQLite库的版本。

-----------------------------------------------------------

2、sqlite日期和时间

编号

1

函数

date()函数

描述

SQLite date()函数用于获取日期并以“YYYY-MM-DD”格式返回。

编号

2

函数

datetime()函数

julianday()函数

描述

SQLite datetime()函数用于计算日期/时间值,并以“YYYY-MM-DD

HH:MM:SS”格式返回。

SQLite julianday()函数根据儒略日返回日期。是公元前4714年11月24日以后的天数(在格林尼治时间)。它将日期作为浮点数返回。

严格来说它不是一个函数。只是一个作为时间字符串参数用于在各种3

4 now()函数 SQLite函数来检索当前的日期和时间。一些典型用法:date('now'),time('now')

5

6

strftime()函数

time()函数

SQLite strftime()函数用于以格式化的方式返回日期,并且还有助于您在日期上进行计算。

SQLite time()函数用于获取时间并以“HH-MM-SS”格式返回。

===========================================================

第五部分 sqlite其他知识点

-----------------------------------------------------------

1、sqlite主键

SQLite主键是用于唯一定义行记录的一个简单字段或多个字段的组合。一个表只能有一个主键。主键的值不可以是一个NULL值。主键通常在创建表时一同创建。在执行CREATE TABLE语句时可以直接定义主键。

CREATE TABLE table_name

(

column1 datatype [ NULL | NOT NULL ],

column2 datatype [ NULL | NOT NULL ],

......

CONSTRAINT constraint_name PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)

);

参数说明:

table_name:指定要创建的表的名称。

column1,column2:指定要在表中创建的列。

constraint_name:指定主键的名称。

pk_col1,pk_col2,… pk_col_n:它指定构成主键的列。

从文档中看出,如果一开始创建表时没有设主键的话,那就会•

相当麻烦,必须要重新建个有主键的表,然后把内容移过去才可以。具体代码如下:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE employees RENAME TO old_employees;

CREATE TABLE employees

(

employee_id INTEGER,

last_name VARCHAR NOT NULL,

first_name VARCHAR,

hire_date DATE,

CONSTRAINT employees_pk PRIMARY KEY (employee_id)

);

INSERT INTO employees SELECT * FROM old_employees;

COMMIT;

PRAGMA foreign_keys=on;


本文标签: 数据库 用于 运算符