1. 介绍

1.1 安装

  • 访问 SQLite 下载页面,从 Windows 区下载预编译的二进制文件。

  • 您需要下载 sqlite-shell-win32-*.zipsqlite-dll-win32-*.zip 压缩文件。

  • 创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。

  • 添加 C:\sqlite 到 PATH 环境变量,最后在命令提示符下,使用 sqlite3 命令,将显示如下结果。

  • C:\>sqlite3
    SQLite version 3.7.15.2 2013-01-09 11:53:05
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite>

1.2 命令

sqlite3 打开

.help 帮助

.quit 退出

.show 查看

.databases 查看所有数据库

.tables 查看数据库内所有表

sqlite>.header on
sqlite>.mode column
sqlite>.timer on
sqlite> //格式化输出

sqlite>.schema sqlite_master 表格

1.3 语法

- 大小写敏感

- 注释:--或//

- 语句:关键字开始,分号结束

- 常用命令语法示例: http://www.runoob.com/sqlite/sqlite-syntax.html

1.4 数据类型

1.4.1 存储类: NULL,INTEGER, REAL, TEXT, BLOB(blob 数据,完全根据它的输入存储)

1.4.2 Affinity类型: TEXT, NUMERIC, INTEGER, REAL, NULL

1.4.3 Boolean 类型:0 / 1

1.4.4 Date与Time类型: TEXT, REAL, INTEGER

2. 操作

2.1 创建数据库 sqlite3 DatabaseName.db

.databases 检查已有数据库

.dump 导出数据库文件到其他格式(如sql,txt)文件

  sqlite3 testDB.db .dump > testDB.sql
  sqlite3 testDB.db < testDB.sql

2.2.a SQLite附加数据库

sqlite> ATTACH DATABASE 'testDB.db' as 'TEST'; //将1或多个数据库附加到主数据库

2.2.b SQLite分离数据库

sqlite> DETACH DATABASE 'TEST'; //将指定数据库从主数据库中分离

2.3 创建表

sqlite> CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
//语法示例

2.4 删除表

sqlite>DROP TABLE COMPANY;
//语法示例

2.5 SQLite 语句

2.5.1 INSERT 语句

//向已存在表COMPANY中插入数据
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'David', 27, 'Texas', 85000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 ); //或使用另一语法插入
INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
//语法示例

使用一个表来填充另一个表:

INSERT INTO first_table_name [(column1, column2, ... columnN)]
SELECT column1, column2, ...columnN
FROM second_table_name
[WHERE condition];
//语法规范,示例待补充

2.5.2 SELECT 语句

//设置正确的格式化输出
sqlite>.header on
sqlite>.mode column
sqlite> SELECT * FROM COMPANY; //获取所有字段
SELECT * FROM table_name; //获取指定字段
SELECT column1, column2, columnN FROM table_name; eg.) sqlite> SELECT ID, NAME, SALARY FROM COMPANY; //设置输出列的宽度
sqlite>.width 10, 20, 10
sqlite>SELECT * FROM COMPANY; //

Schema信息:因为所有的点命令只在 SQLite 提示符中可用,所以当进行带有 SQLite 的编程时,需要使用下面的带有 sqlite_master 表的 SELECT 语句来列出所有在数据库中创建的表:

//选择引用Schema信息的数据库列表
sqlite> SELECT tbl_name FROM sqlite_master WHERE type = 'table'; //同时列出数据列表的完整信息
sqlite> SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';

2.5.3 UPDATE 语句

//eg.更新指定Key行的指定列的数据
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6; //更新所有行的指定列的数据,该列数据改变后相同
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;

2.5.4 DELETE 语句

//eg. 删除指定Key值行,即该ID下“客户”
sqlite> DELETE FROM COMPANY WHERE ID = 7; //删除表中所有数据
sqlite> DELETE FROM COMPANY;

2.6 Distinct 关键字

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

//查询时,相同name值只出现一次
sqlite> SELECT DISTINCT name FROM COMPANY;

2.7 运算符

2.7.1 算数运算符 +, -,*, /, %

2.7.2 比较运算符 ==, =, <>, >, <, >=, <=, !=, !>

说明:== 与 = 同义; <> 与 != 同义

//eg.
sqlite> SELECT * FROM COMPANY WHERE SALARY > 50000; sqlite> SELECT * FROM COMPANY WHERE SALARY = 20000; sqlite> SELECT * FROM COMPANY WHERE SALARY != 20000;

2.7.3 逻辑运算符

AND, BETWEEN, EXISTS, IN, NOT IN, LIKE, GLOB, NOT, OR, IS NULL, IS, IS NOT, ||, UNIQUE

运算符 描述
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 运算符搜索指定表中的每一行,确保唯一性(无重复)。
//eg.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL; //列出 NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制:
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; //同上,已验证。
sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; //列出 AGE 的值为 25 或 27 的所有记录:
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 ); //列出 AGE 的值既不是 25 也不是 27 的所有记录:
sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 ); //列出 AGE 的值在 25 与 27 之间的所有记录:
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27; //下面的 SELECT 语句使用 SQL 子查询,子查询查找 SALARY > 65000 的带
有 AGE 字段的所有记录,后边的 WHERE 子句与 EXISTS 运算符一起使用,列
出了外查询中的 AGE 存在于子查询返回的结果中的所有记录:
sqlite> SELECT AGE FROM COMPANY
     WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000); //下面的 SELECT 语句使用 SQL 子查询,子查询查找 SALARY > 65000 的带
有 AGE 字段的所有记录,后边的 WHERE 子句与 > 运算符一起使用,列出了外
查询中的 AGE 大于子查询返回的结果中的年龄的所有记录:
sqlite> SELECT * FROM COMPANY
     WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

2.7.4 位运算符

& 按位与; | 按位或; ~ 按位非; << 左移; >> 右移

2.8 表达式

布尔表达式 eg. sqlite> SELECT * FROM COMPANY WHERE SALARY = 10000;

数值表达式 eg. sqlite> SELECT (15 + 6) AS ADDITION;

日期表达式 eg. sqlite> SELECT CURRENT_TIMESTAMP;

2.9 SQLite 子句

2.9.1 WHERE 子句:条件限定

//eg.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27; //子查询
sqlite> SELECT AGE FROM COMPANY
WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

2.9.2 LIKE 子句:匹配通配符指定模式的文本值

一起使用的通配符:百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。

//可以使用 AND 或 OR 运算符来结合 N 个数量的条件。在这里,XXXX 可以是任何数字或字符串值。
SELECT FROM table_name
WHERE column LIKE 'XXXX%'
or
SELECT FROM table_name
WHERE column LIKE '%XXXX%'
or
SELECT FROM table_name
WHERE column LIKE 'XXXX_'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX_';
语句 描述
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 结尾的任意值

2.9.3 GLOB 语句:匹配通配符指定模式的文本值,大小写敏感,遵循 UNIX 的语法

一起使用的通配符:星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。

//可以使用 AND 或 OR 运算符来结合 N 个数量的条件。在这里,XXXX 可以是任何数字或字符串值。
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 '????'
语句 描述
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 结尾的任意值

2.9.4 LIMIT 子句:限制由 SELECT 语句返回的数据数量

//限制查询6条记录的数据
sqlite> SELECT * FROM COMPANY LIMIT 6; //从一个特定的偏移开始提取记录,如下为从第(5+1)行提取3条记录
sqlite> SELECT * FROM COMPANY LIMIT 3 OFFSET 5;

2.9.5 ORDER BY 子句:基于一个或多个列按升序(ASC)或降序(DESC)顺序排列数据

//将结果按 SALARY 升序排序:
sqlite> SELECT * FROM COMPANY ORDER BY SALARY ASC; //将结果按 NAME 和 SALARY 升序排序:
sqlite> SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC; //将结果按 NAME 降序排序:
sqlite> SELECT * FROM COMPANY ORDER BY NAME DESC;

2.9.6 GROUP BY 子句:与 SELECT 语句一起使用,对相同的数据进行分组

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

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

具体实例见:http://www.runoob.com/sqlite/sqlite-group-by.html

疑问:Group By 子句按指定列名进行分组后,对同名的行合并成为一行,若所选择的组员其他列为数字,则使用SUM函数求和显示,如例中所示;若为数字不求和会怎样?若为字符等其他类型数据如何处理?

//GROUP BY 语句测试
//以下语句结果为:显示同名的最后一条数据的值
SELECT NAME, SALARY FROM COMPANY GROUP BY NAME ORDER BY NAME; //一下语句结果为:显示同名的最后一条数据的值
SELECT NAME, ADDRESS FROM COMPANY GROUP BY NAME ORDER BY NAME;

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

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

HAVING子句在SELECT语句中的位置:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

HAVING 子句必须放在 GROUP BY 子句之后,必须放在 ORDER BY 子句之前。下面是包含 HAVING 子句的 SELECT 语句的语法:

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

例如:

// 显示名称计数(重复数)小于 2 的所有记录:
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2; // 显示名称计数大于 2 的所有记录:
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2;

至此,SQLite的基本语法及操作已罗列完毕,下一篇整理SQLite的一些高级操作。

[原创] SQLite数据库使用清单(上)的更多相关文章

  1. [原创] SQLite数据库使用清单(下)

    上文两章对SQLite的功能.语法.和操作进行了介绍,本文讲解SQLite的一些高级语法和操作. 3.

  2. 安卓开发笔记(十二):SQLite数据库储存(上)

    SQLite数据库存储(上) 创建数据库 Android专门提供了一个 SQLiteOpenHelper帮助类对数据库进行创建和升级 SQLiteOpenHelper需要创建一个自己的帮助类去继承它并 ...

  3. C#中使用SQLite数据库简介(上)

    [SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...

  4. [Nhibernate]sqlite数据库基本使用

    目录 写在前面 操作步骤 总结 写在前面 昨天有朋友问我在nhibernate中如何使用sqlite数据库,当时实在忙的不可开交,下周要去山西出差,实在没空,按我的说法使用sqlite跟使用sqlse ...

  5. 【C#】使用EF访问Sqlite数据库

    原文:[C#]使用EF访问Sqlite数据库 1. 先上Nuget下载对应的包 如图,搜索System.Data.SQLite下载安装即可,下载完之后带上依赖一共有这么几个: EntityFramew ...

  6. VS2010上连接SQLite数据库

    VS2010连接SQLite数据库 Visual studio 2010及以上版本,连接SQLite数据库 1.在Sqlite开发站点下载SQLite的.exe安装包 Ctrl+F搜索这条语句:Thi ...

  7. 实验8 SQLite数据库操作

    实验报告 课程名称 实验8  SQLite数据库操作 实验日期 2016.5.6 实验项目名称 多媒体应用开发 实验地点 S30010 实验类型 □验证型    √设计型    □综合型 学  时 一 ...

  8. SQLite 数据库调研

    SQLite数据库的特点(转载的): ★技术上的优点和特性 SQLite是一个轻量级.跨平台的关系型数据库.既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图.事务.触发器等)就是理所当 ...

  9. powershell玩转sqlite数据库

    脚本经常需要处理文本,有时候是行列整齐文本.那么powershell脚本处理行列文本有几种方法呢?一种是excel,另外的一些是?access?sqlite? sqlite是一个很小巧的,很方便嵌入到 ...

随机推荐

  1. Loading CSS without blocking render

    The principles behind these techniques aren't new. Filament group, for example, have published great ...

  2. Netty高性能之道

    1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用.相比于 ...

  3. 【HDU1538】A Puzzle for Pirates(经典的海盗问题)

    [题目] Description A bunch of pirates have gotten their hands on a hoard of gold pieces and wish to di ...

  4. sublime sftp 插件安装及破解

    必备插件sftp: 1,Package Control可以用来install其他package 2,sftp远程编辑文件:安装:install->sftp具体配置 sftp工具破解     1, ...

  5. Delphi的Owner与Parent可以不一致,而且Owner不是必须存在(一共7个问题) good

    问题1:Owner与Parent不一致:新建一个Form,上面放一个Button1,一个Panel1,然后在Panel1上再放一个Button2,测试结果:procedure TForm1.Butto ...

  6. Copying Linked Lists with Random Pointers

    Copying Linked Lists with Random Pointers 两个方法:方法一: 1.不考虑随机指针的情况下复制链表: 2.在复制过程中建立一个以原链表节点地址为key,相应的复 ...

  7. 14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁

    14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁 这个部分建立在概念信息关于deadlocks 在章节 14.5.5.2, "D ...

  8. TimePicker,TimePickerDialog以及自定义timepicker(一)

    场景:在activity上点击,弹出一个dialog,然后点击dialog上的一个按钮,在弹出时间.以及自定义dialog 懒,要用到一个选择时间的需求,只要求小时和分钟,弹出式,第一时间想到了tim ...

  9. TortoiseSVN优化设置

    设置log messages的字体 TortoiseSVN默认的字体太小了,看着难受: 可以在Settings > 左侧目录树General > Dialogs 1中进行设置: 使用Bey ...

  10. 合并两个rs结果输出

    <%Const SqlDatabaseName = "DNN625"       ' 数据库名字' Const SqlPassword     = "123456& ...