[原创] SQLite数据库使用清单(上)
1.?介紹
1.1 安裝
-
訪問 SQLite 下載頁面,從 Windows 區下載預編譯的二進制文件。
-
您需要下載 sqlite-shell-win32-*.zip 和 sqlite-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 運算符搜索指定表中的每一行,確保唯一性(無重復)。 |
?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 BYHAVING 子句必須放在 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的一些高級操作。
轉載于:https://www.cnblogs.com/misybing/p/4919550.html
總結
以上是生活随笔為你收集整理的[原创] SQLite数据库使用清单(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS:多个单元格的删除(方法二):
- 下一篇: 《需求工程——软件建模与分析》读后感之三