sqllite入門筆記

  • 2020 年 3 月 11 日
  • 筆記

sqlite下載

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

sqlite install for Windows

C:UsersQFMX>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:DEVELOPsqlitesqllite-tools  # 在dos窗口出入sqlite3  Microsoft Windows [版本 10.0.18362.145]  (c) 2019 Microsoft Corporation。保留所有權利。    C:UsersQFMX>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。

$ 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則自行安裝

$ tar xvzf sqlite-autoconf-3071502.tar.gz  $ cd sqlite-autoconf-3071502  $ ./configure --prefix=/usr/local  $ make  $ make install

sqlite3語法

.help

常用命令

| 命令                  | 描述                                                         |  | :-------------------- | :----------------------------------------------------------- |  | .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 命令提示符的默認設置

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 語句:

ANALYZE;  or  ANALYZE database_name;  or  ANALYZE database_name.table_name;

SQLite AND/OR 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  CONDITION-1 {AND|OR} CONDITION-2;

SQLite ALTER TABLE 語句:

ALTER TABLE table_name ADD COLUMN column_def...;

SQLite ALTER TABLE 語句(Rename):

ALTER TABLE table_name RENAME TO new_table_name;

SQLite ATTACH DATABASE 語句:

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

SQLite BEGIN TRANSACTION 語句:

BEGIN;  or  BEGIN EXCLUSIVE TRANSACTION;

SQLite BETWEEN 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  column_name BETWEEN val-1 AND val-2;

SQLite COMMIT 語句:

COMMIT;

SQLite CREATE INDEX 語句:

CREATE INDEX index_name  ON table_name ( column_name COLLATE NOCASE );

SQLite CREATE UNIQUE INDEX 語句:

CREATE UNIQUE INDEX index_name  ON table_name ( column1, column2,...columnN);

SQLite CREATE TABLE 語句:

CREATE TABLE table_name(     column1 datatype,     column2 datatype,     column3 datatype,     .....     columnN datatype,     PRIMARY KEY( one or more columns )  );

SQLite CREATE TRIGGER 語句:

CREATE TRIGGER database_name.trigger_name  BEFORE INSERT ON table_name FOR EACH ROW  BEGIN     stmt1;     stmt2;     ....  END;

SQLite CREATE VIEW 語句:

CREATE VIEW database_name.view_name  AS  SELECT statement....;

SQLite CREATE VIRTUAL TABLE 語句:

CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log );  or  CREATE VIRTUAL TABLE database_name.table_name USING fts3( );

SQLite COMMIT TRANSACTION 語句:

COMMIT;

SQLite COUNT 子句:

SELECT COUNT(column_name)  FROM   table_name  WHERE  CONDITION;

SQLite DELETE 語句:

DELETE FROM table_name  WHERE  {CONDITION};

SQLite DETACH DATABASE 語句:

DETACH DATABASE 'Alias-Name';

SQLite DISTINCT 子句:

SELECT DISTINCT column1, column2....columnN  FROM   table_name;

SQLite DROP INDEX 語句:

DROP INDEX database_name.index_name;

SQLite DROP TABLE 語句:

DROP TABLE database_name.table_name;

SQLite DROP VIEW 語句:

DROP VIEW view_name;

SQLite DROP TRIGGER 語句:

DROP TRIGGER trigger_name

SQLite EXISTS 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  column_name EXISTS (SELECT * FROM   table_name );

SQLite EXPLAIN 語句:

EXPLAIN INSERT statement...;  or  EXPLAIN QUERY PLAN SELECT statement...;

SQLite GLOB 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  column_name GLOB { PATTERN };

SQLite GROUP BY 子句:

SELECT SUM(column_name)  FROM   table_name  WHERE  CONDITION  GROUP BY column_name;

SQLite HAVING 子句:

SELECT SUM(column_name)  FROM   table_name  WHERE  CONDITION  GROUP BY column_name  HAVING (arithematic function condition);

SQLite INSERT INTO 語句:

INSERT INTO table_name( column1, column2....columnN)  VALUES ( value1, value2....valueN);

SQLite IN 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  column_name IN (val-1, val-2,...val-N);

SQLite Like 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  column_name LIKE { PATTERN };

SQLite NOT IN 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  column_name NOT IN (val-1, val-2,...val-N);

SQLite ORDER BY 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  CONDITION  ORDER BY column_name {ASC|DESC};

SQLite PRAGMA 語句:

PRAGMA pragma_name;    For example:    PRAGMA page_size;  PRAGMA cache_size = 1024;  PRAGMA table_info(table_name);

SQLite RELEASE SAVEPOINT 語句:

RELEASE savepoint_name;

SQLite REINDEX 語句:

REINDEX collation_name;  REINDEX database_name.index_name;  REINDEX database_name.table_name;

SQLite ROLLBACK 語句:

ROLLBACK;  or  ROLLBACK TO SAVEPOINT savepoint_name;

SQLite SAVEPOINT 語句:

SAVEPOINT savepoint_name;

SQLite SELECT 語句:

SELECT column1, column2....columnN  FROM   table_name;

SQLite UPDATE 語句:

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

SQLite VACUUM 語句:

VACUUM;

SQLite WHERE 子句:

SELECT column1, column2....columnN  FROM   table_name  WHERE  CONDITION;

SQLite 數據類型

SQLite 存儲類

每個存儲在 SQLite 資料庫中的值都具有以下存儲類之一:

| 存儲類  | 描述                                                         |  | :------ | :----------------------------------------------------------- |  | 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目前的版本支援以下五種親緣類型:

| 親和類型 | 描述                                                         |  | :------- | :----------------------------------------------------------- |  | 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 表時可使用的各種數據類型名稱,同時也顯示了相應的親和類型:

| 數據類型                                                     | 親和類型 |  | :----------------------------------------------------------- | :------- |  | 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 值。

| 存儲類  | 日期格式                                                     |  | :------ | :----------------------------------------------------------- |  | TEXT    | 格式為 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。                    |  | REAL    | 從公元前 4714 年 11 月 24 日格林尼治時間的正午開始算起的天數。 |  | INTEGER | 從 1970-01-01 00:00:00 UTC 算起的秒數。                      |

您可以以任何上述格式來存儲日期和時間,並且可以使用內置的日期和時間函數來自由轉換不同格式。


創建資料庫

# 在dos命令行輸入  C:UsersQFMX>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:UsersQFMXqfmx.db

導出sqlite文件到文本文件

# 到處qfmx資料庫的數據到E盤  C:UsersQFMX>sqlite3 qfmx.db .dump > E:/qfmx.sql  C:UsersQFMX>  # 進入E盤可查看文件qfmx.sql  # 由於我沒有數據看到的內容為  PRAGMA foreign_keys=OFF;  BEGIN TRANSACTION;  COMMIT;

導入sql文件到sqlite資料庫

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 語句將在附加的資料庫下執行

# 附加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 語句的基本語法如下:

CREATE TABLE database_name.table_name(     column1 datatype  PRIMARY KEY(one or more columns),     column2 datatype,     column3 datatype,     .....     columnN datatype,  );
# 刪除表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 語句的基本語法如下。您可以選擇指定帶有表名的資料庫名稱,如下所示:

DROP TABLE database_name.table_name;
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 語句有兩種基本語法,如下所示:

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);
-- 插入實例寫法一  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>
-- 簡潔寫法  sqlite> INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );  sqlite> INSERT INTO "COMPANY" VALUES (8, '老二', 50, '北京哈哈大學', 15000.0);  sqlite>

使用select填充表

# 將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

根據條件填充表

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 語句的基本語法如下:

SELECT column1, column2, columnN FROM table_name;

在這裡,column1, column2…是表的欄位,他們的值即是您要獲取的。如果您想獲取所有可用的欄位,那麼可以使用下面的語法:

SELECT * FROM table_name;

通過附加資料庫的方法實現多表操作

-- 現在我們有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) 為真。

-- 算術運算符  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