前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sqllite入门笔记

sqllite入门笔记

作者头像
溪初桾
发布2020-03-11 14:31:40
3.4K0
发布2020-03-11 14:31:40
举报
文章被收录于专栏:溪溪技术专栏溪溪技术专栏

sqlite下载

https://www.sqlite.org/download.html

sqlite install for Windows

代码语言:javascript
复制
C:\Users\QFMX>E:
E:\>D:
D:\>cd DEVELOP # 切换到工作目录
D:\DEVELOP>mkdir sqlite # 创建文件加
# 粘贴文件到此目录,并解压
sqlite-dll-win64-x64-3280000.zip
sqlite-tools-win32-x86-3280000.zip
# 解压后把这5个文件归到一个文件夹下
sqldiff.exe
sqlite3.def
sqlite3.dll
sqlite3.exe
sqlite3_analyzer.exe
# 添加此路径到PATH
D:\DEVELOP\sqlite\sqllite-tools
# 在dos窗口出入sqlite3
Microsoft Windows [版本 10.0.18362.145]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\QFMX>sqlite3
SQLite version 3.28.0 2019-04-16 19:49:53
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

在 Linux 上安装 SQLite

目前,几乎所有版本的 Linux 操作系统都附带 SQLite。所以,只要使用下面的命令来检查您的机器上是否已经安装了 SQLite。

代码语言:javascript
复制
$ sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

如果没有看到sqlite3则自行安装

代码语言:javascript
复制
$ tar xvzf sqlite-autoconf-3071502.tar.gz
$ cd sqlite-autoconf-3071502
$ ./configure --prefix=/usr/local
$ make
$ make install

sqlite3语法

.help

常用命令

代码语言:javascript
复制
| 命令                  | 描述                                                         |
| :-------------------- | :----------------------------------------------------------- |
| .backup ?DB? FILE     | 备份 DB 数据库(默认是 "main")到 FILE 文件。                |
| .bail ON\|OFF         | 发生错误后停止。默认为 OFF。                                 |
| .databases            | 列出数据库的名称及其所依附的文件。                           |
| .dump ?TABLE?         | 以 SQL 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。 |
| .echo ON\|OFF         | 开启或关闭 echo 命令。                                       |
| .exit                 | 退出 SQLite 提示符。                                         |
| .explain ON\|OFF      | 开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,及开启 EXPLAIN。 |
| .header(s) ON\|OFF    | 开启或关闭头部显示。                                         |
| .help                 | 显示消息。                                                   |
| .import FILE TABLE    | 导入来自 FILE 文件的数据到 TABLE 表中。                      |
| .indices ?TABLE?      | 显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。 |
| .load FILE ?ENTRY?    | 加载一个扩展库。                                             |
| .log FILE\|off        | 开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。 |
| .mode MODE            | 设置输出模式,MODE 可以是下列之一:**csv** 逗号分隔的值**column** 左对齐的列**html** HTML 的 <table> 代码**insert** TABLE 表的 SQL 插入(insert)语句**line** 每行一个值**list** 由 .separator 字符串分隔的值**tabs** 由 Tab 分隔的值**tcl** TCL 列表元素 |
| .nullvalue STRING     | 在 NULL 值的地方输出 STRING 字符串。                         |
| .output FILENAME      | 发送输出到 FILENAME 文件。                                   |
| .output stdout        | 发送输出到屏幕。                                             |
| .print STRING...      | 逐字地输出 STRING 字符串。                                   |
| .prompt MAIN CONTINUE | 替换标准提示符。                                             |
| .quit                 | 退出 SQLite 提示符。                                         |
| .read FILENAME        | 执行 FILENAME 文件中的 SQL。                                 |
| .schema ?TABLE?       | 显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。 |
| .separator STRING     | 改变输出模式和 .import 所使用的分隔符。                      |
| .show                 | 显示各种设置的当前值。                                       |
| .stats ON\|OFF        | 开启或关闭统计。                                             |
| .tables ?PATTERN?     | 列出匹配 LIKE 模式的表的名称。                               |
| .timeout MS           | 尝试打开锁定的表 MS 毫秒。                                   |
| .width NUM NUM        | 为 "column" 模式设置列宽度。                                 |
| .timer ON\|OFF        | 开启或关闭 CPU 定时器。                                      |

.show # 查看 SQLite 命令提示符的默认设置

代码语言:javascript
复制
sqlite> .show
        echo: off
         eqp: off
     explain: auto
     headers: off
        mode: list
   nullvalue: ""
      output: stdout
colseparator: "|"
rowseparator: "\n"
       stats: off
       width:
    filename: :memory:

SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOBglob 在 SQLite 的语句中有不同的含义 .help -- 注释


SQLite 语句

SQLite ANALYZE 语句:

代码语言:javascript
复制
ANALYZE;
or
ANALYZE database_name;
or
ANALYZE database_name.table_name;

SQLite AND/OR 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION-1 {AND|OR} CONDITION-2;

SQLite ALTER TABLE 语句:

代码语言:javascript
复制
ALTER TABLE table_name ADD COLUMN column_def...;

SQLite ALTER TABLE 语句(Rename):

代码语言:javascript
复制
ALTER TABLE table_name RENAME TO new_table_name;

SQLite ATTACH DATABASE 语句:

代码语言:javascript
复制
ATTACH DATABASE 'DatabaseName' As 'Alias-Name';

SQLite BEGIN TRANSACTION 语句:

代码语言:javascript
复制
BEGIN;
or
BEGIN EXCLUSIVE TRANSACTION;

SQLite BETWEEN 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name BETWEEN val-1 AND val-2;

SQLite COMMIT 语句:

代码语言:javascript
复制
COMMIT;

SQLite CREATE INDEX 语句:

代码语言:javascript
复制
CREATE INDEX index_name
ON table_name ( column_name COLLATE NOCASE );

SQLite CREATE UNIQUE INDEX 语句:

代码语言:javascript
复制
CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);

SQLite CREATE TABLE 语句:

代码语言:javascript
复制
CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

SQLite CREATE TRIGGER 语句:

代码语言:javascript
复制
CREATE TRIGGER database_name.trigger_name 
BEFORE INSERT ON table_name FOR EACH ROW
BEGIN 
   stmt1; 
   stmt2;
   ....
END;

SQLite CREATE VIEW 语句:

代码语言:javascript
复制
CREATE VIEW database_name.view_name  AS
SELECT statement....;

SQLite CREATE VIRTUAL TABLE 语句:

代码语言:javascript
复制
CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log );
or
CREATE VIRTUAL TABLE database_name.table_name USING fts3( );

SQLite COMMIT TRANSACTION 语句:

代码语言:javascript
复制
COMMIT;

SQLite COUNT 子句:

代码语言:javascript
复制
SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;

SQLite DELETE 语句:

代码语言:javascript
复制
DELETE FROM table_name
WHERE  {CONDITION};

SQLite DETACH DATABASE 语句:

代码语言:javascript
复制
DETACH DATABASE 'Alias-Name';

SQLite DISTINCT 子句:

代码语言:javascript
复制
SELECT DISTINCT column1, column2....columnN
FROM   table_name;

SQLite DROP INDEX 语句:

代码语言:javascript
复制
DROP INDEX database_name.index_name;

SQLite DROP TABLE 语句:

代码语言:javascript
复制
DROP TABLE database_name.table_name;

SQLite DROP VIEW 语句:

代码语言:javascript
复制
DROP VIEW view_name;

SQLite DROP TRIGGER 语句:

代码语言:javascript
复制
DROP TRIGGER trigger_name

SQLite EXISTS 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name EXISTS (SELECT * FROM   table_name );

SQLite EXPLAIN 语句:

代码语言:javascript
复制
EXPLAIN INSERT statement...;
or 
EXPLAIN QUERY PLAN SELECT statement...;

SQLite GLOB 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name GLOB { PATTERN };

SQLite GROUP BY 子句:

代码语言:javascript
复制
SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name;

SQLite HAVING 子句:

代码语言:javascript
复制
SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);

SQLite INSERT INTO 语句:

代码语言:javascript
复制
INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

SQLite IN 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);

SQLite Like 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };

SQLite NOT IN 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name NOT IN (val-1, val-2,...val-N);

SQLite ORDER BY 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION
ORDER BY column_name {ASC|DESC};

SQLite PRAGMA 语句:

代码语言:javascript
复制
PRAGMA pragma_name;

For example:

PRAGMA page_size;
PRAGMA cache_size = 1024;
PRAGMA table_info(table_name);

SQLite RELEASE SAVEPOINT 语句:

代码语言:javascript
复制
RELEASE savepoint_name;

SQLite REINDEX 语句:

代码语言:javascript
复制
REINDEX collation_name;
REINDEX database_name.index_name;
REINDEX database_name.table_name;

SQLite ROLLBACK 语句:

代码语言:javascript
复制
ROLLBACK;
or
ROLLBACK TO SAVEPOINT savepoint_name;

SQLite SAVEPOINT 语句:

代码语言:javascript
复制
SAVEPOINT savepoint_name;

SQLite SELECT 语句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name;

SQLite UPDATE 语句:

代码语言:javascript
复制
UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE  CONDITION ];

SQLite VACUUM 语句:

代码语言:javascript
复制
VACUUM;

SQLite WHERE 子句:

代码语言:javascript
复制
SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION;

SQLite 数据类型

SQLite 存储类

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

代码语言:javascript
复制
| 存储类  | 描述                                                         |
| :------ | :----------------------------------------------------------- |
| NULL    | 值是一个 NULL 值。                                           |
| INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
| REAL    | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。              |
| TEXT    | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
| BLOB    | 值是一个 blob 数据,完全根据它的输入存储。                   |

SQLite 亲和(Affinity)类型

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

代码语言:javascript
复制
| 亲和类型 | 描述                                                         |
| :------- | :----------------------------------------------------------- |
| TEXT     | 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。 |
| INTEGER  | 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。 |
| REAL     | 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。 |
| NONE     | 不做任何的转换,直接以该数据所属的数据类型进行存储。         |
| NUMERIC  | 当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。 |

SQLite 亲和类型(Affinity)及类型名称

下表列出了当创建 SQLite3 表时可使用的各种数据类型名称,同时也显示了相应的亲和类型:

代码语言:javascript
复制
| 数据类型                                                     | 亲和类型 |
| :----------------------------------------------------------- | :------- |
| INTINTEGERTINYINTSMALLINTMEDIUMINTBIGINTUNSIGNED BIG INTINT2INT8 | INTEGER  |
| CHARACTER(20)VARCHAR(255)VARYING CHARACTER(255)NCHAR(55)NATIVE CHARACTER(70)NVARCHAR(100)TEXTCLOB | TEXT     |
| BLOBno datatype specified                                    | NONE     |
| REALDOUBLEDOUBLE PRECISIONFLOAT                              | REAL     |
| NUMERICDECIMAL(10,5)BOOLEANDATEDATETIME                      | NUMERIC  |

Boolean 数据类型

SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。

Date 与 Time 数据类型

SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。

代码语言:javascript
复制
| 存储类  | 日期格式                                                     |
| :------ | :----------------------------------------------------------- |
| TEXT    | 格式为 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。                    |
| REAL    | 从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。 |
| INTEGER | 从 1970-01-01 00:00:00 UTC 算起的秒数。                      |

您可以以任何上述格式来存储日期和时间,并且可以使用内置的日期和时间函数来自由转换不同格式。


创建数据库

代码语言:javascript
复制
# 在dos命令行输入
C:\Users\QFMX>sqlite3.exe qfmx.db
SQLite version 3.28.0 2019-04-16 19:49:53
Enter ".help" for usage hints.
sqlite>
# 查看创建好的数据库
sqlite> .databases
main: C:\Users\QFMX\qfmx.db

导出sqlite文件到文本文件

代码语言:javascript
复制
# 到处qfmx数据库的数据到E盘
C:\Users\QFMX>sqlite3 qfmx.db .dump > E:/qfmx.sql
C:\Users\QFMX>
# 进入E盘可查看文件qfmx.sql
# 由于我没有数据看到的内容为
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
COMMIT;

导入sql文件到sqlite数据库

代码语言:javascript
复制
E:\>sqlite3 qfmx1.db
SQLite version 3.28.0 2019-04-16 19:49:53
Enter ".help" for usage hints.
sqlite> .quit
E:\>sqlite3 qfmx1.db < qfmx.sql
E:\>

附加数据库

SQLite 的 ATTACH DATABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 SQLite 语句将在附加的数据库下执行

代码语言:javascript
复制
# 附加qfmx.db到TEST数据库
sqlite> ATTACH DATABASE 'qfmx.db' as 'TEST';
sqlite>
sqlite> .database
main:
TEST: E:\qfmx.db # 已经附加成功
sqlite>
# 已经附加数据库的不能再次附加
sqlite> ATTACH DATABASE 'qfmx.db' as 'TEMP';
Error: database TEMP is already in use # 已被TEST使用
sqlite>

分离数据库

DETACH DATABASE 'TEST'


SQLite 创建表

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

语法

CREATE TABLE 语句的基本语法如下:

代码语言:javascript
复制
CREATE TABLE database_name.table_name(
   column1 datatype  PRIMARY KEY(one or more columns),
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);
代码语言:javascript
复制
# 删除表DEPARTMENT和COMPANY
sqlite> DROP TABLE IF EXISTS "DEPARTMENT";
sqlite> DROP TABLE IF EXISTS "COMPANY";
sqlite> .tables
sqlite> CREATE TABLE "COMPANY" (
   ...>   "ID" INTEGER NOT NULL,
   ...>   "NAME" TEXT NOT NULL,
   ...>   "AGE" INTEGER NOT NULL,
   ...>   "ADDRESS" TEXT NOT NULL,
   ...>   "SALARY" REAL,
   ...>   PRIMARY KEY ("ID")
   ...> );
sqlite> CREATE TABLE "DEPARTMENT" (
   ...>   "ID" INTEGER NOT NULL,
   ...>   "DEPT" text NOT NULL,
   ...>   "EMP_ID" INTEGER NOT NULL,
   ...>   PRIMARY KEY ("ID")
   ...> );
sqlite> .tables
COMPANY     DEPARTMENT
sqlite>

SQLite 删除表

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

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

语法

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

代码语言:javascript
复制
DROP TABLE database_name.table_name;
代码语言:javascript
复制
sqlite> .tables # 展示所有表
COMPANY        COMPANY_copy1  COMPANY_copy2  DEPARTMENT
sqlite> drop table COMPANY_copy1; # 删除表COMPANY_copy1
sqlite> .tables  # 再次展示所有表,表COMPANY_copy1已被删除
COMPANY        COMPANY_copy2  DEPARTMENT
sqlite>

SQLite Insert 语句

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

语法

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

代码语言:javascript
复制
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
VALUES (value1, value2, value3,...valueN);

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

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

代码语言:javascript
复制
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
代码语言:javascript
复制
-- 插入实例写法一
sqlite> insert into COMPANY ('ID','NAME','AGE','ADDRESS','SALARY') values (2,'BOb',20,'贵州b农业大学',6000.00);
sqlite> insert into COMPANY ('ID','NAME','AGE','ADDRESS','SALARY') values (3,'Lily',30,'贵州b农业大学',2000.00);
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   ...> VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   ...> VALUES (5, 'David', 27, 'Texas', 85000.00 );
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   ...> VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
sqlite>
代码语言:javascript
复制
-- 简洁写法
sqlite> INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
sqlite> INSERT INTO "COMPANY" VALUES (8, '老二', 50, '北京哈哈大学', 15000.0);
sqlite>

使用select填充表

代码语言:javascript
复制
# 将COMPANY表的查询结果填充到COMPANY_copy2表
sqlite> insert into COMPANY_copy2 (ID,NAME,AGE,ADDRESS,SALARY) select ID,NAME,AGE,ADDRESS,SALARY from COMPANY;
sqlite>
sqlite> select * from COMPANY_copy2;
1|老大|50|北京农业大学|5000.0
2|BOb|20|贵州b农业大学|6000.0
3|Lily|30|贵州b农业大学|2000.0
4|Mark|25|Rich-Mond |65000.0
5|David|27|Texas|85000.0
6|Kim|22|South-Hall|45000.0
7|James|24|Houston|10000.0
8|老二|50|北京哈哈大学|15000.0

根据条件填充表

代码语言:javascript
复制
sqlite> CREATE TABLE "COMPANY_temp" (
   ...>   "ID" INTEGER NOT NULL,
   ...>   "NAME" TEXT NOT NULL,
   ...>   "AGE" INTEGER NOT NULL,
   ...>   "ADDRESS" TEXT NOT NULL,
   ...>   "SALARY" REAL,
   ...>   PRIMARY KEY ("ID")
   ...> );
-- 不按照顺序来也可以
sqlite> insert into COMPANY_temp (ID,NAME,AGE,ADDRESS,SALARY) select ID,NAME,AGE,ADDRESS,SALARY from COMPANY where ID=5;
sqlite> insert into COMPANY_temp (ID,NAME,AGE,ADDRESS,SALARY) select ID,NAME,AGE,ADDRESS,SALARY from COMPANY where ID=4;
sqlite> insert into COMPANY_temp (ID,NAME,AGE,ADDRESS,SALARY) select ID,NAME,AGE,ADDRESS,SALARY from COMPANY where ID=1;
sqlite> insert into COMPANY_temp (ID,NAME,AGE,ADDRESS,SALARY) select ID,NAME,AGE,ADDRESS,SALARY from COMPANY where ID=8;
sqlite> select * from  COMPANY_temp;
1|老大|50|北京农业大学|5000.0
4|Mark|25|Rich-Mond |65000.0
5|David|27|Texas|85000.0
8|老二|50|北京哈哈大学|15000.0
sqlite>

SQLite Select 语句

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

语法

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

代码语言:javascript
复制
SELECT column1, column2, columnN FROM table_name;

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

代码语言:javascript
复制
SELECT * FROM table_name;

通过附加数据库的方法实现多表操作

代码语言:javascript
复制
-- 现在我们有3个数据库
-- css.db
-- qfmx.db
-- qfmx1.db
-- 我们任意使用一个进入
E:\>sqlite3 qfmx1.db
SQLite version 3.28.0 2019-04-16 19:49:53
Enter ".help" for usage hints.
sqlite> .databases
main: E:\qfmx1.db  -- 现在我们qfmx1.db数据库的别名为main
sqlite>
sqlite> create table main.q1(ID int(11),NAME varchar(50));
sqlite> insert table main.q1(1,'qfmx520');
sqlite> select * from q1;
1|qfmx520
# 开始附加数据库
sqlite> attach database 'css.db' as 'DB1'; -- css.db附加数据库为DB1
sqlite> attach database 'qfmx.db' as 'DB2'; -- qfmx.db附加数据库为DB1
sqlite> attach database 'qfmx1.db' as 'DB3'; -- qfmx1.db附加数据库为DB1
sqlite> .databases -- 查看所有数据库
main: E:\qfmx1.db
DB1: E:\css.db
DB2: E:\qfmx.db
DB3: E:\qfmx1.db
sqlite>
sqlite> select * from DB3.q1; -- 通过别名DB3查询q1表
1|qfmx520
sqlite> .tables -- 此时列出了可执行的表
DB1.COMPANY        DB1.COMPANY_temp   DB2.allms          q1
DB1.COMPANY_copy2  DB1.DEPARTMENT     DB3.q1
sqlite> select * from DB1.COMPANY; -- 通过附加数据库DB1查询css.db里面的表
1|老大|50|北京农业大学|5000.0
2|BOb|20|贵州b农业大学|6000.0
3|Lily|30|贵州b农业大学|2000.0
4|Mark|25|Rich-Mond |65000.0
5|David|27|Texas|85000.0
6|Kim|22|South-Hall|45000.0
7|James|24|Houston|10000.0
8|老二|50|北京哈哈大学|15000.0
sqlite> select * from DB1.COMPANY_temp;  -- 通过附加数据库DB1查询css.db里面的表
1|老大|50|北京农业大学|5000.0
4|Mark|25|Rich-Mond |65000.0
5|David|27|Texas|85000.0
8|老二|50|北京哈哈大学|15000.0
sqlite> select * from DB2.allms;  -- 通过附加数据库DB2查询qfmx.db里面的表
1|xyj
sqlite> select * from DB1.COMPANY_copy2;  -- 通过附加数据库DB1查询css.db里面的表
1|老大|50|北京农业大学|5000.0
2|BOb|20|贵州b农业大学|6000.0
3|Lily|30|贵州b农业大学|2000.0
4|Mark|25|Rich-Mond |65000.0
5|David|27|Texas|85000.0
6|Kim|22|South-Hall|45000.0
7|James|24|Houston|10000.0
8|老二|50|北京哈哈大学|15000.0
sqlite> select * from DB1.DEPARTMENT; -- 通过附加数据库DB2查询qfmx.db里面的表,but里面没数据
sqlite> -- 下面通过附加数据可别名就可以对qfmx.db里面的表进行一波插入数据
sqlite> select * from DB1.DEPARTMENT;
sqlite> insert into DB2.allms values (2,'db2');
sqlite> insert into DB2.allms values (3,'test');
sqlite> insert into DB2.allms values (4,'liil');
sqlite> select * from DB2.allms;
1|xyj
2|db2
3|test
4|liil
sqlite> -- 下面删除其他通过附加数据库别名删除其他数据库的表
sqlite> .tables
DB1.COMPANY        DB1.COMPANY_temp   DB2.allms          q1
DB1.COMPANY_copy2  DB1.DEPARTMENT     DB3.q1
sqlite> drop table DB1.COMPANY_copy2;
sqlite> .tables
DB1.COMPANY       DB1.DEPARTMENT    DB3.q1
DB1.COMPANY_temp  DB2.allms         q1
sqlite> -- 有了附加数据库别名就可以对其他数据库的数据表进行CRUD了
-- 删库呢?试一试吧,好像不行,万一成功了,准备跑路吧!!

SQLite 运算符

SQLite 运算符是什么?

运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算。

运算符用于指定 SQLite 语句中的条件,并在语句中连接多个条件。

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

SQLite 算术运算符

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

运算符

描述

实例

+

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

a + b 将得到 30

-

减法 - 左操作数减去右操作数

a - b 将得到 -10

*

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

a * b 将得到 200

/

除法 - 左操作数除以右操作数

b / a 将得到 2

%

取模 - 左操作数除以右操作数后得到的余数

b % a will give 0

SQLite 比较运算符

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

运算符

描述

实例

==

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

(a == b) 不为真。

=

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

(a = b) 不为真。

!=

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

(a != b) 为真。

<>

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

(a <> b) 为真。

>

检查左操作数的值是否大于右操作数的值,如果是则条件为真。

(a > b) 不为真。

<

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

(a < b) 为真。

>=

检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。

(a >= b) 不为真。

<=

检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。

(a <= b) 为真。

!<

检查左操作数的值是否不小于右操作数的值,如果是则条件为真。

(a !< b) 为假。

!>

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

(a !> b) 为真。

代码语言:javascript
复制
-- 算术运算符
sqlite> select 10 + 20;
10 + 20 = 30
sqlite> select 10 - 20;
10 - 20 = -10
sqlite> select 10 * 20;
10 * 20 = 200
sqlite> select 10 / 5;
10 / 5 = 2
sqlite> select 12 %  5;
12 %  5 = 2
-- 比较运算符
sqlite> .mode tabs -- 由 Tab 分隔的值
sqlite> select * from DB1.COMPANY;
1       老大    50      北京农业大学    5000.0
2       BOb     20      贵州b农业大学   6000.0
3       Lily    30      贵州b农业大学   2000.0
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
6       Kim     22      South-Hall      45000.0
7       James   24      Houston 10000.0
8       老二    50      北京哈哈大学    15000.0
sqlite> SELECT * FROM COMPANY WHERE SALARY > 50000;
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
sqlite> SELECT * FROM COMPANY WHERE SALARY = 20000;
sqlite> SELECT * FROM COMPANY WHERE SALARY = 15000.0;
8       老二    50      北京哈哈大学    15000.0
sqlite> SELECT * FROM COMPANY WHERE SALARY != 20000;
1       老大    50      北京农业大学    5000.0
2       BOb     20      贵州b农业大学   6000.0
3       Lily    30      贵州b农业大学   2000.0
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
6       Kim     22      South-Hall      45000.0
7       James   24      Houston 10000.0
8       老二    50      北京哈哈大学    15000.0
sqlite> SELECT * FROM COMPANY WHERE SALARY <> 20000; -- <>表示不等于
1       老大    50      北京农业大学    5000.0
2       BOb     20      贵州b农业大学   6000.0
3       Lily    30      贵州b农业大学   2000.0
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
6       Kim     22      South-Hall      45000.0
7       James   24      Houston 10000.0
8       老二    50      北京哈哈大学    15000.0
sqlite> SELECT * FROM COMPANY WHERE SALARY >= 65000;
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
-- 逻辑运算符
sqlite>
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
1       老大    50      北京农业大学    5000.0
3       Lily    30      贵州b农业大学   2000.0
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
8       老二    50      北京哈哈大学    15000.0
sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
1       老大    50      北京农业大学    5000.0
2       BOb     20      贵州b农业大学   6000.0
3       Lily    30      贵州b农业大学   2000.0
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
6       Kim     22      South-Hall      45000.0
7       James   24      Houston 10000.0
8       老二    50      北京哈哈大学    15000.0
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
6       Kim     22      South-Hall      45000.0
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
1       老大    50      北京农业大学    5000.0
2       BOb     20      贵州b农业大学   6000.0
3       Lily    30      贵州b农业大学   2000.0
6       Kim     22      South-Hall      45000.0
7       James   24      Houston 10000.0
8       老二    50      北京哈哈大学    15000.0
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
4       Mark    25      Rich-Mond       65000.0
5       David   27      Texas   85000.0
sqlite> SELECT AGE FROM COMPANY
   ...>         WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
50
20
30
25
27
22
24
50
sqlite> SELECT * FROM COMPANY
   ...>         WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
1       老大    50      北京农业大学    5000.0
3       Lily    30      贵州b农业大学   2000.0
8       老二    50      北京哈哈大学    15000.0
-- 位运算符
sqlite> .mode line
sqlite> select 60 | 13;
60 | 13 = 61
sqlite> select 60 & 13;
60 & 13 = 12
sqlite>  select  (~60);
(~60) = -61
sqlite>  select  (60 << 2);
(60 << 2) = 240
sqlite>  select  (60 >> 2);
(60 >> 2) = 15
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sqlite下载
  • sqlite install for Windows
    • 在 Linux 上安装 SQLite
    • sqlite3语法
      • SQLite 语句
        • SQLite ANALYZE 语句:
          • SQLite AND/OR 子句:
            • SQLite ALTER TABLE 语句:
              • SQLite ALTER TABLE 语句(Rename):
                • SQLite ATTACH DATABASE 语句:
                  • SQLite BEGIN TRANSACTION 语句:
                    • SQLite BETWEEN 子句:
                      • SQLite COMMIT 语句:
                        • SQLite CREATE INDEX 语句:
                          • SQLite CREATE UNIQUE INDEX 语句:
                            • SQLite CREATE TABLE 语句:
                              • SQLite CREATE TRIGGER 语句:
                                • SQLite CREATE VIEW 语句:
                                  • SQLite CREATE VIRTUAL TABLE 语句:
                                    • SQLite COMMIT TRANSACTION 语句:
                                      • SQLite COUNT 子句:
                                        • SQLite DELETE 语句:
                                          • SQLite DETACH DATABASE 语句:
                                            • SQLite DISTINCT 子句:
                                              • SQLite DROP INDEX 语句:
                                                • SQLite DROP TABLE 语句:
                                                  • SQLite DROP VIEW 语句:
                                                    • SQLite DROP TRIGGER 语句:
                                                      • SQLite EXISTS 子句:
                                                        • SQLite EXPLAIN 语句:
                                                          • SQLite GLOB 子句:
                                                            • SQLite GROUP BY 子句:
                                                              • SQLite HAVING 子句:
                                                                • SQLite INSERT INTO 语句:
                                                                  • SQLite IN 子句:
                                                                    • SQLite Like 子句:
                                                                      • SQLite NOT IN 子句:
                                                                        • SQLite ORDER BY 子句:
                                                                          • SQLite PRAGMA 语句:
                                                                            • SQLite RELEASE SAVEPOINT 语句:
                                                                              • SQLite REINDEX 语句:
                                                                                • SQLite ROLLBACK 语句:
                                                                                  • SQLite SAVEPOINT 语句:
                                                                                    • SQLite SELECT 语句:
                                                                                      • SQLite UPDATE 语句:
                                                                                        • SQLite VACUUM 语句:
                                                                                          • SQLite WHERE 子句:
                                                                                          • SQLite 数据类型
                                                                                            • SQLite 存储类
                                                                                              • SQLite 亲和(Affinity)类型
                                                                                                • SQLite 亲和类型(Affinity)及类型名称
                                                                                                  • Boolean 数据类型
                                                                                                    • Date 与 Time 数据类型
                                                                                                    • 创建数据库
                                                                                                    • 导出sqlite文件到文本文件
                                                                                                    • 导入sql文件到sqlite数据库
                                                                                                    • 附加数据库
                                                                                                    • 分离数据库
                                                                                                    • SQLite 创建表
                                                                                                      • 语法
                                                                                                      • SQLite 删除表
                                                                                                        • 语法
                                                                                                        • SQLite Insert 语句
                                                                                                          • 语法
                                                                                                          • 使用select填充表
                                                                                                          • SQLite Select 语句
                                                                                                            • 语法
                                                                                                            • 通过附加数据库的方法实现多表操作
                                                                                                            • SQLite 运算符
                                                                                                              • SQLite 运算符是什么?
                                                                                                                • SQLite 算术运算符
                                                                                                                  • SQLite 比较运算符
                                                                                                                  相关产品与服务
                                                                                                                  数据库
                                                                                                                  云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                                                                                                                  领券
                                                                                                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档