程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLite入門之四表的增刪攺查

SQLite入門之四表的增刪攺查

編輯:關於SqlServer

     4.1 SQLite 存儲類型

    SQLite 存儲類型

    存儲類型 描述 NULL 值是一個 NULL 值。 INTEGER 值是一個帶符號的整數,根據值的大小存儲在 1、2、3、4、6 或 8 字節中。 REAL 值是一個浮點值,存儲為 8 字節的 IEEE 浮點數字。 TEXT 值是一個文本字符串,使用數據庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)存儲。 BLOB 值是一個 blob 數據,完全根據它的輸入存儲。

    4.2 創建數據庫和創建表

    創建了一個 COMPANY 表,ID 作為主鍵,NOT NULL 的約束表示在表中創建紀錄時這些字段不能為 NULL

    ? 1 2 3 4 5 bixiaopeng@bixiaopeng db$ sqlite3 wireless.db SQLite version 3.7.13 2012-07-17 17:46:21 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL);

    CREATE TABLE 是告訴數據庫系統創建一個新表的關鍵字。CREATE TABLE 語句後跟著表的唯一的名稱或標識。您也可以選擇指定帶有 table_name 的 database_name。

    查看表是否創建成功

    ? 1 2 sqlite> .tables COMPANY

    查看表的完整信息

    ? 1 2 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);

    4.3 插入數據

    插入數據,方法一:插入對應的列的值

    ? 1 2 sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)    ...> VALUES (1, 'Paul', 32, 'California', 20000.00 );

    查詢是否插入成功

    ? 1 2 sqlite> SELECT * FROM COMPANY; 1|Paul|32|California|20000.0

     插入數據,方法二:給所有列插入值

    ? 1 2 3 4 sqlite> INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 ); sqlite> SELECT * FROM COMPANY; 1|Paul|32|California|20000.0 7|James|24|Houston|10000.0

    用第二種方法多插入幾個數據:

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 sqlite> INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); sqlite> INSERT INTO COMPANY VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); sqlite> INSERT INTO COMPANY VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); sqlite> INSERT INTO COMPANY VALUES (5, 'David', 27, 'Texas', 85000.00 ); sqlite> INSERT INTO COMPANY VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 ); sqlite> SELECT * FROM COMPANY; 1|Paul|32|California|20000.0 7|James|24|Houston|10000.0 2|Allen|25|Texas|15000.0 3|Teddy|23|Norway|20000.0 4|Mark|25|Rich-Mond |65000.0 5|David|27|Texas|85000.0 6|Kim|22|South-Hall|45000.0

    4.4 更新數據

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 //先插入一條數據 sqlite> INSERT INTO COMPANY VALUES (8, 'wirelessqa', 28, 'HZ', 20000.00 ); sqlite> SELECT * FROM COMPANY; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0 8   wirelessqa  28  HZ  20000.0   //更新NAME為wirelessqa的地址為NanJing sqlite> UPDATE COMPANY SET ADDRESS = 'NanJing' WHERE NAME = 'wirelessqa'; 8   wirelessqa  28  NanJing 20000.0   //查看更新後的數據 sqlite> SELECT * FROM COMPANY WHERE NAME = 'wirelessqa'; ID  NAME    AGE ADDRESS SALARY 8   wirelessqa  28  NanJing 20000.0

    4.5 刪除數據

    ? 1 2 3 4 //刪除ADDRESS為NanJing的這條數據 sqlite> DELETE FROM COMPANY WHERE ADDRESS = 'NanJing'; sqlite> SELECT * FROM COMPANY WHERE ADDRESS = 'NanJing'; sqlite>

    4.6 數據查詢

    4.6.1. SQLite 算術運算符

    運算符: + - * / %

    ? 1 2 3 4 5 6 7 8 9 10 sqlite> select 4 + 2; 6 sqlite> select 4 - 2; 2 sqlite> select 4 * 2; 8 sqlite> select 4 / 2; 2 sqlite> select 4 % 2; 0

    4.6.2. SQLite 算術運算符

    運算符 描述 實例 == 檢查兩個操作數的值是否相等,如果相等則條件為真。 (a == b) 不為真。 = 檢查兩個操作數的值是否相等,如果相等則條件為真 (a = b) 不為真。 != 檢查兩個操作數的值是否相等,如果不相等則條件為真 (a != b) 為真。 <> 檢查兩個操作數的值是否相等,如果不相等則條件為真 (a <> b) 為真。 > 檢查左操作數的值是否大於右操作數的值,如果是則條件為真。 (a > b) 不為真。 < 檢查左操作數的值是否小於右操作數的值,如果是則條件為真 (a < b) 為真。 >= 檢查左操作數的值是否大於等於右操作數的值,如果是則條件為真 (a >= b) 不為真。 <= 檢查左操作數的值是否小於等於右操作數的值,如果是則條件為真 (a <= b) 為真。

    看一下表裡現有的數據:

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 sqlite> .headers on sqlite> .mode tabs sqlite> SELECT * FROM COMPANY; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0 sqlite> SELECT * FROM COMPANY WHERE AGE = 32; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 sqlite> SELECT * FROM COMPANY WHERE AGE == 32 ; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 sqlite> SELECT * FROM COMPANY WHERE AGE < 32; ID  NAME    AGE ADDRESS SALARY 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0 sqlite> SELECT * FROM COMPANY WHERE AGE != 32; ID  NAME    AGE ADDRESS SALARY 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0 sqlite> SELECT * FROM COMPANY WHERE AGE <= 32; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0 sqlite> SELECT * FROM COMPANY WHERE AGE >= 32; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 sqlite> SELECT * FROM COMPANY WHERE AGE > 32;

    4.6.3. 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 運算符搜索指定表中的每一行,確保唯一性(無重復)。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 //AND 運算符允許在一個 SQL 語句的 WHERE 子句中的多個條件的存在。 sqlite> SELECT * FROM COMPANY WHERE AGE < 25 AND SALARY > 15000.0; ID  NAME    AGE ADDRESS SALARY 3   Teddy   23  Norway  20000.0 6   Kim 22  South-Hall  45000.0   //OR 運算符用於結合一個 SQL 語句的 WHERE 子句中的多個條件。 sqlite> SELECT * FROM COMPANY WHERE AGE < 25 OR SALARY > 15000.0; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0   //BETWEEN 運算符用於在給定最小值和最大值范圍內的一系列值中搜索值。 sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 32; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 2   Allen   25  Texas   15000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0   //EXISTS 運算符用於在滿足一定條件的指定表中搜索行的存在。 sqlite> SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000); AGE 32 24 25 23 25 27 22   //AGE 不為 NULL 的所有記錄 sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0   //LIKE 運算符用於把某個值與使用通配符運算符的相似值進行比較。 sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; ID  NAME    AGE ADDRESS SALARY 6   Kim 22  South-Hall  45000.0   //GLOB 運算符用於把某個值與使用通配符運算符的相似值進行比較。GLOB 與 LIKE 不同之處在於,它是大小寫敏感的。 sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; ID  NAME    AGE ADDRESS SALARY 6   Kim 22  South-Hall  45000.0   //IN 運算符用於把某個值與一系列指定列表的值進行比較。 sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 ); ID  NAME    AGE ADDRESS SALARY 2   Allen   25  Texas   15000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0   //IN 運算符的對立面,用於把某個值與不在一系列指定列表的值進行比較。 sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 ); ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 3   Teddy   23  Norway  20000.0 6   Kim 22  South-Hall  45000.0   // sqlite> SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000); ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0   sqlite> SELECT * FROM COMPANY WHERE AGE < (SELECT AGE FROM COMPANY WHERE SALARY > 65000); ID  NAME    AGE ADDRESS SALARY 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 6   Kim 22  South-Hall  45000.0

    4.6.4 排序、分組、去重、時間

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 //通過內置函數查看一共有多少條數據 sqlite> SELECT COUNT(*) AS "RECORDS" FROM COMPANY; RECORDS 7   //顯示前4條 sqlite> SELECT * FROM COMPANY LIMIT 4; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0     //按SALARY降序排序 sqlite> SELECT * FROM COMPANY ORDER BY SALARY ASC; ID  NAME    AGE ADDRESS SALARY 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 1   Paul    32  California  20000.0 3   Teddy   23  Norway  20000.0 6   Kim 22  South-Hall  45000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0   //按SALARY升序排序 sqlite> SELECT * FROM COMPANY ORDER BY SALARY DESC; ID  NAME    AGE ADDRESS SALARY 5   David   27  Texas   85000.0 4   Mark    25  Rich-Mond   65000.0 6   Kim 22  South-Hall  45000.0 1   Paul    32  California  20000.0 3   Teddy   23  Norway  20000.0 2   Allen   25  Texas   15000.0 7   James   24  Houston 10000.0   //按NAME和SALARY升序排序 sqlite> SELECT * FROM COMPANY ORDER BY AGE,SALARY DESC; ID  NAME    AGE ADDRESS SALARY 6   Kim 22  South-Hall  45000.0 3   Teddy   23  Norway  20000.0 7   James   24  Houston 10000.0 4   Mark    25  Rich-Mond   65000.0 2   Allen   25  Texas   15000.0 5   David   27  Texas   85000.0 1   Paul    32  California  20000.0   // GROUP BY 子句用於與 SELECT 語句一起使用,來對相同的數據進行分組。   // 查詢某個人的工資總數 sqlite>  SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME; NAME    SUM(SALARY) Allen   15000.0 David   85000.0 James   10000.0 Kim 45000.0 Mark    65000.0 Paul    20000.0 Teddy   20000.0   // GROUP BY 和 ORDER BY一起用 sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC; NAME    SUM(SALARY) Teddy   20000.0 Paul    20000.0 Mark    65000.0 Kim 45000.0 James   10000.0 David   85000.0 Allen   15000.0   //HAVING 子句允許指定條件來過濾將出現在最終結果中的分組結果。   //WHERE 子句在所選列上設置條件,而 HAVING 子句則在由 GROUP BY 子句創建的分組上設置條件。   //在一個查詢中,HAVING 子句必須放在 GROUP BY 子句之後,必須放在 ORDER BY 子句之前     //查詢所有數據 qlite> SELECT * FROM COMPANY; ID  NAME    AGE ADDRESS SALARY 1   Paul    32  California  20000.0 7   James   24  Houston 10000.0 2   Allen   25  Texas   15000.0 3   Teddy   23  Norway  20000.0 4   Mark    25  Rich-Mond   65000.0 5   David   27  Texas   85000.0 6   Kim 22  South-Hall  45000.0   //查詢AGE,並去重 sqlite> SELECT DISTINCT AGE FROM COMPANY; AGE 32 24 25 23 27 22   日期 & 時間   //把header關掉了 sqlite> . header off sqlite> SELECT date('now'); 2014-02-27   sqlite> SELECT datetime(1092941466, 'unixepoch'); 2004-08-19 18:51:06   sqlite> SELECT TIME('NOW'); 07:47:25?

    4.6.5. 常用函數

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 //表行數 sqlite> SELECT count(*) FROM COMPANY; 7   //最大值 sqlite> SELECT max(salary) FROM COMPANY; 85000.0   //最小值 sqlite> SELECT min(salary) FROM COMPANY; 10000.0   //平均值 sqlite> SELECT avg(salary) FROM COMPANY; 37142.8571428572 sqlite> SELECT sum(salary) FROM COMPANY; 260000.0   //轉大寫 sqlite> SELECT upper(name) FROM COMPANY; PAUL JAMES ALLEN TEDDY MARK DAVID KIM   //轉小寫 sqlite> SELECT lower(name) FROM COMPANY; paul james allen teddy mark david kim   //長度 sqlite> SELECT name, length(name) FROM COMPANY; Paul    4 James   5 Allen   5 Teddy   5 Mark    4 David   5 Kim 3 sqlite>

    4.7 刪除表

    ? 1 2 sqlite> DROP TABLE COMPANY; sqlite> .tables

    4.8 刪除數據庫

    ? 1 直接rm 刪除掉db文件就可以了
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved