最輕巧的數據庫SQLite之高級教程Day05

1、SQLite 視圖(View)

視圖(View)只不過是通過相關的名稱存儲在數據庫中的一個 SQLite 語句。視圖(View)實際上是一個以預定義的 SQLite 查詢形式存在的表的組合。

視圖(View)可以包含一個表的所有行或從一個或多個表選定行。視圖(View)可以從一個或多個表創建,這取決於要創建視圖的 SQLite 查詢。、

視圖(View)是一種虛表,允許用戶實現以下幾點:

  • 用戶或用戶組查找結構數據的方式更自然或直觀。

  • 限制數據訪問,用戶只能看到有限的數據,而不是完整的表。

  • 彙總各種表中的數據,用於生成報告。

SQLite 視圖是隻讀的,因此可能無法在視圖上執行 DELETE、INSERT 或 UPDATE 語句。但是可以在視圖上創建一個觸發器,當嘗試 DELETE、INSERT 或 UPDATE 視圖時觸發,需要做的動作在觸發器內容中定義。

創建視圖

SQLite 的視圖是使用 CREATE VIEW 語句創建的。SQLite 視圖可以從一個單一的表、多個表或其他視圖創建。

CREATE VIEW 的基本語法如下:

CREATE [TEMP | TEMPORARY] VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

您可以在 SELECT 語句中包含多個表,這與在正常的 SQL SELECT 查詢中的方式非常相似。如果使用了可選的 TEMP 或 TEMPORARY 關鍵字,則將在臨時數據庫中創建視圖。

實例

假設 COMPANY 表有以下記錄:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.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
7           James       24          Houston     10000.0

現在,下面是一個從 COMPANY 表創建視圖的實例。視圖只從 COMPANY 表中選取幾列:

sqlite> CREATE VIEW COMPANY_VIEW AS
SELECT ID, NAME, AGE
FROM  COMPANY;

現在,可以查詢 COMPANY_VIEW,與查詢實際表的方式類似。下面是實例:

sqlite> SELECT * FROM COMPANY_VIEW;

這將產生以下結果:

ID          NAME        AGE
----------  ----------  ----------
1           Paul        32
2           Allen       25
3           Teddy       23
4           Mark        25
5           David       27
6           Kim         22
7           James       24

刪除視圖

要刪除視圖,只需使用帶有 view_name 的 DROP VIEW 語句。DROP VIEW 的基本語法如下:

sqlite> DROP VIEW view_name;

下面的命令將刪除我們在前面創建的 COMPANY_VIEW 視圖:

sqlite> DROP VIEW COMPANY_VIEW;

2、SQLite 事務(Transaction)

事務(Transaction)是一個對數據庫執行的工作單元。事務(Transaction)是以邏輯順序完成的工作單位或序列,可以是由用戶手動操作完成,也可以是由某種數據庫程序自動完成。

事務(Transaction)是指一個或多個更改數據庫的擴展。例如,如果您正在創建一個記錄或者更新一個記錄或者從表中刪除一個記錄,那麼您正在該表上執行事務。重要的是要控制事務以確保數據的完整性和處理數據庫錯誤。

實際上,您可以把許多的 SQLite 查詢聯合成一組,把所有這些放在一起作爲事務的一部分進行執行。

事務的屬性

事務(Transaction)具有以下四個標準屬性,通常根據首字母縮寫爲 ACID:

  • 原子性(Atomicity):確保工作單位內的所有操作都成功完成,否則,事務會在出現故障時終止,之前的操作也會回滾到以前的狀態。

  • 一致性(Consistency):確保數據庫在成功提交的事務上正確地改變狀態。

  • 隔離性(Isolation):使事務操作相互獨立和透明。

  • 持久性(Durability):確保已提交事務的結果或效果在系統發生故障的情況下仍然存在。

事務控制

使用下面的命令來控制事務:

  • BEGIN TRANSACTION:開始事務處理。

  • COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。

  • ROLLBACK:回滾所做的更改。

事務控制命令只與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他們不能在創建表或刪除表時使用,因爲這些操作在數據庫中是自動提交的。

BEGIN TRANSACTION 命令

事務(Transaction)可以使用 BEGIN TRANSACTION 命令或簡單的 BEGIN 命令來啓動。此類事務通常會持續執行下去,直到遇到下一個 COMMIT 或 ROLLBACK 命令。不過在數據庫關閉或發生錯誤時,事務處理也會回滾。以下是啓動一個事務的簡單語法:

BEGIN;

or 

BEGIN TRANSACTION;

COMMIT 命令

COMMIT 命令是用於把事務調用的更改保存到數據庫中的事務命令。

COMMIT 命令把自上次 COMMIT 或 ROLLBACK 命令以來的所有事務保存到數據庫。

COMMIT 命令的語法如下:

COMMIT;

or

END TRANSACTION;

ROLLBACK 命令

ROLLBACK 命令是用於撤消尚未保存到數據庫的事務的事務命令。

ROLLBACK 命令只能用於撤銷自上次發出 COMMIT 或 ROLLBACK 命令以來的事務。

ROLLBACK 命令的語法如下:

ROLLBACK;

實例

假設 COMPANY 表有以下記錄:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.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
7           James       24          Houston     10000.0

現在,讓我們開始一個事務,並從表中刪除 age = 25 的記錄,最後,我們使用 ROLLBACK 命令撤消所有的更改。

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;

檢查 COMPANY 表,仍然有以下記錄:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.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
7           James       24          Houston     10000.0

現在,讓我們開始另一個事務,從表中刪除 age = 25 的記錄,最後我們使用 COMMIT 命令提交所有的更改。

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;

檢查 COMPANY 表,有以下記錄:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

3、SQLite 子查詢

子查詢或內部查詢或嵌套查詢是在另一個 SQLite 查詢內嵌入在 WHERE 子句中的查詢。

使用子查詢返回的數據將被用在主查詢中作爲條件,以進一步限制要檢索的數據。

子查詢可以與 SELECT、INSERT、UPDATE 和 DELETE 語句一起使用,可伴隨着使用運算符如 =、<、>、>=、<=、IN、BETWEEN 等。

以下是子查詢必須遵循的幾個規則:

  • 子查詢必須用括號括起來。

  • 子查詢在 SELECT 子句中只能有一個列,除非在主查詢中有多列,與子查詢的所選列進行比較。

  • ORDER BY 不能用在子查詢中,雖然主查詢可以使用 ORDER BY。可以在子查詢中使用 GROUP BY,功能與 ORDER BY 相同。

  • 子查詢返回多於一行,只能與多值運算符一起使用,如 IN 運算符。

  • BETWEEN 運算符不能與子查詢一起使用,但是,BETWEEN 可在子查詢內使用。

SELECT 語句中的子查詢使用

子查詢通常與 SELECT 語句一起使用。基本語法如下:

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
      (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE])

實例

假設 COMPANY 表有以下記錄:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.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
7           James       24          Houston     10000.0

現在,讓我們檢查 SELECT 語句中的子查詢使用:

sqlite> SELECT * 
     FROM COMPANY 
     WHERE ID IN (SELECT ID 
                  FROM COMPANY 
                  WHERE SALARY > 45000) ;

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

INSERT 語句中的子查詢使用

子查詢也可以與 INSERT 語句一起使用。INSERT 語句使用子查詢返回的數據插入到另一個表中。在子查詢中所選擇的數據可以用任何字符、日期或數字函數修改。

基本語法如下:

INSERT INTO table_name [ (column1 [, column2 ]) ]
           SELECT [ *|column1 [, column2 ]
           FROM table1 [, table2 ]
           [ WHERE VALUE OPERATOR ]

實例

假設 COMPANY_BKP 的結構與 COMPANY 表相似,且可使用相同的 CREATE TABLE 進行創建,只是表名改爲 COMPANY_BKP。現在把整個 COMPANY 表複製到 COMPANY_BKP,語法如下:

sqlite> INSERT INTO COMPANY_BKP
     SELECT * FROM COMPANY 
     WHERE ID IN (SELECT ID 
                  FROM COMPANY) ;

UPDATE 語句中的子查詢使用

子查詢可以與 UPDATE 語句結合使用。當通過 UPDATE 語句使用子查詢時,表中單個或多個列被更新。

基本語法如下:

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

實例

假設,我們有 COMPANY_BKP 表,是 COMPANY 表的備份。

下面的實例把 COMPANY 表中所有 AGE 大於或等於 27 的客戶的 SALARY 更新爲原來的 0.50 倍:

sqlite> UPDATE COMPANY
     SET SALARY = SALARY * 0.50
     WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
                   WHERE AGE >= 27 );

這將影響兩行,最後 COMPANY 表中的記錄如下:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  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       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

DELETE 語句中的子查詢使用

子查詢可以與 DELETE 語句結合使用,就像上面提到的其他語句一樣。

基本語法如下:

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

實例

假設,我們有 COMPANY_BKP 表,是 COMPANY 表的備份。

下面的實例刪除 COMPANY 表中所有 AGE 大於或等於 27 的客戶記錄:

sqlite> DELETE FROM COMPANY
     WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
                   WHERE AGE > 27 );

這將影響兩行,最後 COMPANY 表中的記錄如下:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

4、SQLite Autoincrement(自動遞增)

SQLite 的 AUTOINCREMENT 是一個關鍵字,用於表中的字段值自動遞增。我們可以在創建表時在特定的列名稱上使用 AUTOINCREMENT 關鍵字實現該字段值的自動增加。

關鍵字 AUTOINCREMENT 只能用於整型(INTEGER)字段。

語法

AUTOINCREMENT 關鍵字的基本用法如下:

CREATE TABLE table_name(
   column1 INTEGER AUTOINCREMENT,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);

實例

假設要創建的 COMPANY 表如下所示:

sqlite> CREATE TABLE COMPANY(
   ID INTEGER PRIMARY KEY   AUTOINCREMENT,
   NAME           TEXT      NOT NULL,
   AGE            INT       NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

現在,向 COMPANY 表插入以下記錄:

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Paul', 32, 'California', 20000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ('Allen', 25, 'Texas', 15000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ('Teddy', 23, 'Norway', 20000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Mark', 25, 'Rich-Mond ', 65000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'David', 27, 'Texas', 85000.00 );


INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Kim', 22, 'South-Hall', 45000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'James', 24, 'Houston', 10000.00 );

這將向 COMPANY 表插入 7 個元組,此時 COMPANY 表的記錄如下:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.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
7           James       24          Houston     10000.0

5、SQLite 注入

如果您的站點允許用戶通過網頁輸入,並將輸入內容插入到 SQLite 數據庫中,這個時候您就面臨着一個被稱爲 SQL 注入的安全問題。本章節將向您講解如何防止這種情況的發生,確保腳本和 SQLite 語句的安全。

注入通常在請求用戶輸入時發生,比如需要用戶輸入姓名,但用戶卻輸入了一個 SQLite 語句,而這語句就會在不知不覺中在數據庫上運行。

永遠不要相信用戶提供的數據,所以只處理通過驗證的數據,這項規則是通過模式匹配來完成的。在下面的實例中,用戶名 username 被限制爲字母數字字符或者下劃線,長度必須在 8 到 20 個字符之間 - 請根據需要修改這些規則。

6、SQLite Explain(解釋)

在 SQLite 語句之前,可以使用 "EXPLAIN" 關鍵字或 "EXPLAIN QUERY PLAN" 短語,用於描述表的細節。

如果省略了 EXPLAIN 關鍵字或短語,任何的修改都會引起 SQLite 語句的查詢行爲,並返回有關 SQLite 語句如何操作的信息。

  • 來自 EXPLAIN 和 EXPLAIN QUERY PLAN 的輸出只用於交互式分析和排除故障。

  • 輸出格式的細節可能會隨着 SQLite 版本的不同而有所變化。

應用程序不應該使用 EXPLAIN 或 EXPLAIN QUERY PLAN,因爲其確切的行爲是可變的且只有部分會被記錄。

語法

EXPLAIN 的語法如下:

EXPLAIN [SQLite Query]

EXPLAIN QUERY PLAN 的語法如下:

EXPLAIN  QUERY PLAN [SQLite Query]

實例

假設 COMPANY 表有以下記錄:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.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
7           James       24          Houston     10000.0

現在,讓我們檢查 SELECT 語句中的 Explain 使用:

sqlite> EXPLAIN SELECT *  FROM COMPANY  WHERE Salary &gt= 20000;

這將產生以下結果:

addr        opcode      p1          p2          p3
----------  ----------  ----------  ----------  ----------
0           Goto        0           19
1           Integer     0           0
2           OpenRead    0           8
3           SetNumColu  0           5
4           Rewind      0           17
5           Column      0           4
6           RealAffini  0           0
7           Integer     20000       0
8           Lt          357         16          collseq(BI
9           Rowid       0           0
10          Column      0           1
11          Column      0           2
12          Column      0           3
13          Column      0           4
14          RealAffini  0           0
15          Callback    5           0
16          Next        0           5
17          Close       0           0
18          Halt        0           0
19          Transactio  0           0
20          VerifyCook  0           38
21          Goto        0           1
22          Noop        0           0

現在,讓我們檢查 SELECT 語句中的 Explain Query Plan 使用:

SQLite> EXPLAIN QUERY PLAN SELECT * FROM COMPANY WHERE Salary &gt= 20000;
order       from        detail
----------  ----------  -------------
0           0           TABLE COMPANY

7、SQLite Vacuum

VACUUM 命令通過複製主數據庫中的內容到一個臨時數據庫文件,然後清空主數據庫,並從副本中重新載入原始的數據庫文件。這消除了空閒頁,把表中的數據排列爲連續的,另外會清理數據庫文件結構。

如果表中沒有明確的整型主鍵(INTEGER PRIMARY KEY),VACUUM 命令可能會改變表中條目的行 ID(ROWID)。VACUUM 命令只適用於主數據庫,附加的數據庫文件是不可能使用 VACUUM 命令。

如果有一個活動的事務,VACUUM 命令就會失敗。VACUUM 命令是一個用於內存數據庫的任何操作。由於 VACUUM 命令從頭開始重新創建數據庫文件,所以 VACUUM 也可以用於修改許多數據庫特定的配置參數。

手動 VACUUM

下面是在命令提示符中對整個數據庫發出 VACUUM 命令的語法:

$sqlite3 database_name "VACUUM;"

您也可以在 SQLite 提示符中運行 VACUUM,如下所示:

sqlite> VACUUM;

您也可以在特定的表上運行 VACUUM,如下所示:

sqlite> VACUUM table_name;

自動 VACUUM(Auto-VACUUM)

SQLite 的 Auto-VACUUM 與 VACUUM 不大一樣,它只是把空閒頁移到數據庫末尾,從而減小數據庫大小。通過這樣做,它可以明顯地把數據庫碎片化,而 VACUUM 則是反碎片化。所以 Auto-VACUUM 只會讓數據庫更小。

在 SQLite 提示符中,您可以通過下面的編譯運行,啓用/禁用 SQLite 的 Auto-VACUUM:

sqlite> PRAGMA auto_vacuum = NONE;  -- 0 means disable auto vacuum
sqlite> PRAGMA auto_vacuum = INCREMENTAL;  -- 1 means enable incremental vacuum
sqlite> PRAGMA auto_vacuum = FULL;  -- 2 means enable full auto vacuum

您可以從命令提示符中運行下面的命令來檢查 auto-vacuum 設置:

$sqlite3 database_name "PRAGMA auto_vacuum;"

8、SQLite 日期 & 時間

SQLite 支持以下五個日期和時間函數:

序號函數實例
1date(timestring, modifier, modifier, ...)以 YYYY-MM-DD 格式返回日期。
2time(timestring, modifier, modifier, ...)以 HH:MM:SS 格式返回時間。
3datetime(timestring, modifier, modifier, ...)以 YYYY-MM-DD HH:MM:SS 格式返回。
4julianday(timestring, modifier, modifier, ...)這將返回從格林尼治時間的公元前 4714 年 11 月 24 日正午算起的天數。
5strftime(format, timestring, modifier, modifier, ...)這將根據第一個參數指定的格式字符串返回格式化的日期。具體格式見下邊講解。

上述五個日期和時間函數把時間字符串作爲參數。時間字符串後跟零個或多個 modifier 修飾符。strftime() 函數也可以把格式字符串 format 作爲其第一個參數。下面將爲您詳細講解不同類型的時間字符串和修飾符。

時間字符串

一個時間字符串可以採用下面任何一種格式:

序號時間字符串實例
1YYYY-MM-DD2010-12-30
2YYYY-MM-DD HH:MM2010-12-30 12:10
3YYYY-MM-DD HH:MM:SS.SSS2010-12-30 12:10:04.100
4MM-DD-YYYY HH:MM30-12-2010 12:10
5HH:MM12:10
6YYYY-MM-DDTHH:MM2010-12-30 12:10
7HH:MM:SS12:10:01
8YYYYMMDD HHMMSS20101230 121001
9now2013-05-07

您可以使用 "T" 作爲分隔日期和時間的文字字符。

實例

現在讓我們使用 SQLite 提示符嘗試不同的實例。下面是計算當前日期:

sqlite> SELECT date('now');
2013-05-07

下面是計算當前月份的最後一天:

sqlite> SELECT date('now','start of month','+1 month','-1 day');
2013-05-31

下面是計算給定 UNIX 時間戳 1092941466 的日期和時間:

sqlite> SELECT datetime(1092941466, 'unixepoch');
2004-08-19 18:51:06

下面是計算給定 UNIX 時間戳 1092941466 相對本地時區的日期和時間:

sqlite> SELECT datetime(1092941466, 'unixepoch', 'localtime');
2004-08-19 11:51:06

下面是計算當前的 UNIX 時間戳:

sqlite> SELECT strftime('%s','now');
1367926057

下面是計算美國"獨立宣言"簽署以來的天數:

sqlite> SELECT julianday('now') - julianday('1776-07-04');
86504.4775830326

下面是計算從 2004 年某一特定時刻以來的秒數:

sqlite> SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
295001572

下面是計算當年 10 月的第一個星期二的日期:

sqlite> SELECT date('now','start of year','+9 months','weekday 2');
2013-10-01

下面是計算從 UNIX 紀元算起的以秒爲單位的時間(類似 strftime('%s','now') ,不同的是這裏有包括小數部分):

sqlite> SELECT (julianday('now') - 2440587.5)*86400.0;
1367926077.12598

在 UTC 與本地時間值之間進行轉換,當格式化日期時,使用 utc 或 localtime 修飾符,如下所示:

sqlite> SELECT time('12:00', 'localtime');
05:00:00
sqlite>  SELECT time('12:00', 'utc');
19:00:00

9、SQLite 常用函數

SQLite 有許多內置函數用於處理字符串或數字數據。下面列出了一些有用的 SQLite 內置函數,且所有函數都是大小寫不敏感,這意味着您可以使用這些函數的小寫形式或大寫形式或混合形式。欲瞭解更多詳情,請查看 SQLite 的官方文檔:

序號函數 & 描述
1SQLite COUNT 函數
SQLite COUNT 聚集函數是用來計算一個數據庫表中的行數。
2SQLite MAX 函數
SQLite MAX 聚合函數允許我們選擇某列的最大值。
3SQLite MIN 函數
SQLite MIN 聚合函數允許我們選擇某列的最小值。
4SQLite AVG 函數
SQLite AVG 聚合函數計算某列的平均值。
5SQLite SUM 函數
SQLite SUM 聚合函數允許爲一個數值列計算總和。
6SQLite RANDOM 函數
SQLite RANDOM 函數返回一個介於 -9223372036854775808 和 +9223372036854775807 之間的僞隨機整數。
7SQLite ABS 函數
SQLite ABS 函數返回數值參數的絕對值。
8SQLite UPPER 函數
SQLite UPPER 函數把字符串轉換爲大寫字母。
9SQLite LOWER 函數
SQLite LOWER 函數把字符串轉換爲小寫字母。
10SQLite LENGTH 函數
SQLite LENGTH 函數返回字符串的長度。
11SQLite sqlite_version 函數
SQLite sqlite_version 函數返回 SQLite 庫的版本。

在我們開始講解這些函數實例之前,先假設 COMPANY 表有以下記錄:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.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
7           James       24          Houston     10000.0

SQLite COUNT 函數

SQLite COUNT 聚集函數是用來計算一個數據庫表中的行數。下面是實例:

sqlite> SELECT count(*) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

count(*)
----------
7

SQLite MAX 函數

SQLite MAX 聚合函數允許我們選擇某列的最大值。下面是實例:

sqlite> SELECT max(salary) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

max(salary)
-----------
85000.0

SQLite MIN 函數

SQLite MIN 聚合函數允許我們選擇某列的最小值。下面是實例:

sqlite> SELECT min(salary) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

min(salary)
-----------
10000.0

SQLite AVG 函數

SQLite AVG 聚合函數計算某列的平均值。下面是實例:

sqlite> SELECT avg(salary) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

avg(salary)
----------------
37142.8571428572

SQLite SUM 函數

SQLite SUM 聚合函數允許爲一個數值列計算總和。下面是實例:

sqlite> SELECT sum(salary) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

sum(salary)
-----------
260000.0

SQLite RANDOM 函數

SQLite RANDOM 函數返回一個介於 -9223372036854775808 和 +9223372036854775807 之間的僞隨機整數。下面是實例:

sqlite> SELECT random() AS Random;

上面的 SQLite SQL 語句將產生以下結果:

Random
-------------------
5876796417670984050

SQLite ABS 函數

SQLite ABS 函數返回數值參數的絕對值。下面是實例:

sqlite> SELECT abs(5), abs(-15), abs(NULL), abs(0), abs("ABC");

上面的 SQLite SQL 語句將產生以下結果:

abs(5)      abs(-15)    abs(NULL)   abs(0)      abs("ABC")
----------  ----------  ----------  ----------  ----------
5           15                      0           0.0

SQLite UPPER 函數

SQLite UPPER 函數把字符串轉換爲大寫字母。下面是實例:

sqlite> SELECT upper(name) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

upper(name)
-----------
PAUL
ALLEN
TEDDY
MARK
DAVID
KIM
JAMES

SQLite LOWER 函數

SQLite LOWER 函數把字符串轉換爲小寫字母。下面是實例:

sqlite> SELECT lower(name) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

lower(name)
-----------
paul
allen
teddy
mark
david
kim
james

SQLite LENGTH 函數

SQLite LENGTH 函數返回字符串的長度。下面是實例:

sqlite> SELECT name, length(name) FROM COMPANY;

上面的 SQLite SQL 語句將產生以下結果:

NAME        length(name)
----------  ------------
Paul        4
Allen       5
Teddy       5
Mark        4
David       5
Kim         3
James       5

SQLite sqlite_version 函數

SQLite sqlite_version 函數返回 SQLite 庫的版本。下面是實例:

sqlite> SELECT sqlite_version() AS 'SQLite Version';

上面的 SQLite SQL 語句將產生以下結果:

SQLite Version
--------------
3.6.20


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章