NULL
值爲NULL的值。
INTEGER
帶符號的整數。
REAL
浮點值。
TEXT
文本字符串。
BLOB
爲blob數據,徹底根據它的輸入存儲。
uniqueidentifier
用於存儲GUID的值。sql
算數運算符數據庫
比較運算符ide
邏輯運算符函數
位運算符
假設變量A=60,變量B=13:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100 A|B = 0011 1101 ~A = 1100 0011性能
建立一個TABLE_NAME表,PKKEY爲主鍵測試
CREATE TABLE TABLE_NAME(PKKEY INT PRIMARY KEY NOT NULL, PKUSER UNIQUEIDENTIFIER NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);搜索引擎
CREATE TABLE IF NOT EXISTS TABLE_NAME(PKKEY UNIQUEIDENTIFIER NOT NULL, PKUSER UNIQUEIDENTIFIER NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);3d
DROP TABLE TABLE_NAME;指針
INSERT INTO TABLE_NAME (PKKEY, PKUSER, NAME, AGE, ADDRESS, SALARY) VLAUES (VALUE1, VALUE2, VALUE3, VALUE4, VALUE5, VALUE6);code
INSERT INTO TABLE_NAME VALUES (VALUE1, VALUE2, VALUE3, VALUE4, VALUE5, VALUE6);
INSERT INTO TABLE_NAME (PKKEY, PJUSER, ... SALARY) SELECT colum1, colum2, ... columN FROM TABLE_NAME2 WHERE CONDITION;
SELECT PKKEY, PKUSER, ... SALARY FROM TABLE_NAME;
SELECT * FROM TABLE_NAME;
UPDATE TABLE_NAME SET PKKEY=value1, PKUSER=value2, ... WHERE condition;
DELETE FROM TABLE_NAME WHERE condition;
like
運算符是用來匹配通配符指定模式的文本值。若是搜索表達式與模式表達式匹配,like
運算符將返回真true
,也就是1。 與like
運算符一塊兒使用的兩個通配符 百分號(%) 與下劃線(_)
百分號(%) 表明零個、一個或多個數字或字符。
下劃線(_) 表明一個單一的數字或字符。能夠組合使用。
GLOB
運算符是用來匹配通配符指定模式的文本值。若是搜索表達式與模式表達式匹配,GLOB
運算符將返回真true
,也就是1。
與like
不一樣的是,GLOB
大小寫敏感。 與GLOB
一塊兒使用的兩個通配符是星號(*)、問號(?)
星號(*) 表明零個、一個或者多個數字或字符。
問號(?) 表明一個單一的數字或字符。
limit
子句用於限制由SELECT
語句返回的數據數量。
SELECT * FROM TABLE_NAME LIMIT [rows];
SELECT * FROM TABLE_NAME LIMIT [rows] OFFSET [row num];
Order by
子句是用來基於一個或多個列按升序或降序順序排列的數據。
SELECT * FROM TABLE_NAME WHERE condition ORDER BY NAME [ASC | DESC];
Group By
子句用於與SELECT
語句一塊兒使用,來對該列下的相同的數據進行分組。
在SELECT
語句中,GROUP BY
子句放在WHERE
子句以後,放在ORDER BY
子句以前。
SELECT NAME, SUM(SALARY) FROM TABLE_NAME WHERE condition GROUP BY NAME ORDER BY SUM(SALARY) DESC;
HAVING
子句容許指定條件來過濾將出如今最終結果中的分組結果。
WHERE
子句在所選列上設置條件,而HAVING
子句則在有GROUP BY
子句建立的分組上設置條件。
SELECT NAME, SUM(SALARY) FROM TABLE_NAME WHERE condition GROUP BY NAME HAVING count(NAME) < 2 ORDER BY SUM(SALARY);
distinct
關鍵字與SELECT語句一塊兒使用,來消除全部重複的記錄,並只獲取惟一一次記錄。
SELECT DISTINCT NAME FROM TABLE_NAME WHERE condition;
約束是在表的數據列上強制執行的規則。這些是用來限制能夠插入到表中的數據類型。約束能夠是列級或者表級。列級約束僅適用於列,表級約束被應用到整個表。
NULL
值默認狀況下,列能夠保存NULL
值,但若是不想某列有NUll
值,只要在該列上定義NOT NULL
約束。DEFAULT
約束在INSERT INTO
語句沒有提供一個特定的值時,爲列提供一個默認值。UNIQUE
約束防止在一個特定列存在兩個記錄具備相同的值。PRIMARY KEY
約束惟一標識數據庫表中的每一個記錄。在一個表中能夠有多個UNIQUE
列,但只能有一個主鍵。
CREATE TABLE TABLE_NAME(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL UNIQUE, SALARY REAL DEFAULT 50000.00);
Join
子句用於結合兩個或多個數據庫表的記錄。JOIN
是一種經過共同值來結合兩個表中字段的手段。
交叉鏈接: 把第一個表的每一行與第二個表的每一行進行匹配。若是兩個輸入表分別有x和y行,則結果表有x * y行。因爲交叉鏈接可能產生很是大的表,使用須謹慎。
SELECT Acolum1, Acolum2, Bcolum2 FROM TABLEA CROSS JOIN TABLEB;
內鏈接: 根據鏈接謂詞結合兩個表的列值來建立一個新的結果表。查詢會把表1中的每一行與表2中的每一行進行比較,找到全部知足鏈接謂詞的行的匹配對。當知足鏈接謂詞時,A和B行的每一個匹配對的列值會合併成一個結果行。內鏈接是默認的鏈接類型。INNER
關鍵字是可選的。
SELECT Acolum1, Acolum2, Bcolum2 FROM TABLEA [INNER] JOIN TABLEB ON condition;
爲了不冗餘,可使用USING
表達式聲明內鏈接。這個表達式指定一個或多個列的列表:
SELECT ... FROM TABLEA JOIN TABLEB USING (colum1, ...) ...
天然鏈接(NATURAL JOIN
)相似於JOIN...USING
,只是它會自動測試存在兩個表中的每一列的值之間相等值:
SELECT ... FROM TABLEA NATURAL JOIN TABLEB ...
外鏈接: 是內鏈接的擴展,雖然SQL標準定義了三種類型的外鏈接: LEFT, RIGHT, FULL,
但SQLite
只支持左外鏈接(LEFT OUTER JOIN
)。
外鏈接(OUTER JOIN
)聲明條件的方法與內鏈接是相同的,使用ON
, USING
或NATURAL
關鍵字來表達。最初的結果表以相同的方式進行計算。一旦主鏈接計算完成,外鏈接將一個或兩個表中任何未鏈接的行,合併進來,外鏈接的列使用NULL
值,將他們附加到結果表中。
SELECT Acolum1, Acolum2, Bcolum1 FROM TABLEA LEFT OUTER JOIN TABLEB ON condition...
SELECT ... FROM TABLEA LEFT OUTER JOIN TABLEB USING (colum1, ...) ...
SELECT ... FROM TABLEA NATURAL LEFT OUTER JOIN TABLEB ...
UNION
子句用於合併兩個或者多個SELECT
語句的結果,不返回任何重複的行。
爲了使用UNION
,每一個SELECT被選擇的列數必須是相同的,相同數目的列表達式,相同的數據類型,並確保他們有相同的順序,但它們沒必要具備相同的長度。
SELECT colum1, colum2 FROM TABLEA WHERE condition UNION SELECT colum1, colum2 FROM TABLEA WHERE condition;
UNION ALL
子句,用於結合兩個SELECT語句的結果,包括重複行。
SELECT colum1, colum2 FROM TABLEA WHERE condition UNION ALL SELECT colum1, colum2 FROM TABLEA WHERE condition;
暫時把表或列重命名爲另外一個名字,被稱爲別名。使用表別名是指在一個特定的SQLite
語句中,重命名錶,重命名是臨時的改變,在數據庫中實際的表的名稱是不會改變的。關鍵字AS能夠被省略。
表的別名:
SELECT colum1, colum2... FROM TABLE_NAME AS TABLEA WHERE condition;
列的別名:
SELECT colum1 AS columA FROM TABLE_NAME WHERE condition;
觸發器(Trigger) 是數據庫的回調函數,它會在指定的數據庫事件發生時自動執行/調用。
DELETE、INSERT
或UPDATE
時觸發,或在一個或多個指定表的列發生更新時觸發。FOR EACH ROW
觸發器,沒有FOR EACH STATEMENT
觸發器。所以,明確指定 FOR EACH ROW
是可選的。WHEN
子句,則只針對WHEN
子句爲真的指定行執行SQL語句。若是沒有提供WHEN
子句,則針對全部行執行SQL語句。BEFORE
或AFTER
關鍵字決定什麼時候執行觸發器動做,決定是在關聯行的插入、修改或刪除以前或者以後執行觸發器動做。CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name BEGIN -- Trigger logic goes here ... END;
在這裏,event_name
能夠是在所提到的表table_name
上的INSERT、DELETE
和UPDATE
數據庫操做。亦可在表名後選擇指定 FOR EACH ROW
。 下面是在UPDATE
操做上在表的一個或多個指定列上建立觸發器的語法:
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_name BEGIN --Trigger logic goes here ... END;
能夠從sqlite_master表中列出全部的觸發器。
SELECT name FROM sqlite_master WHERE type='trigger';
刪除觸發器:
DROP TRIGGER trigger_name;
補充:
FOR EACH ROW
是操做語句每影響到一行的時候就出發一次,也就是說刪除/更新了10行,就觸發了10次。
FOR EACH STATE
一條操做語句就觸發一次,有時沒有被影響的行也執行。
SQLite
只實現了FOR EACH ROW
的觸發。
when
的用法:
CREATE TRIGGER trigger_name AFTER UPDATE OF id ON table1 FOR EACH ROW WHEN new_id>30 BEGIN update table_2 set id = new_id WHERE table_2 id = OLD_ID END;
索引(Index) 是一種特殊的查找表,數據庫搜索引擎用來加快數據檢索。簡單的說就是,索引是一個指向表中數據的指針。
CREATE INDEX index_name ON table_name;
單列索引是一個只基於表的一個列上建立的索引。
CREATE INDEX index_name ON table_name (column_name);
惟一索引不只爲了性能,同時也爲了數據的完整性。惟一索引不容許任何重複的值插入到表中。
CREATE UNIQUE INDEX index_name ON table_name (column_name);
組合索引 是基於一個表的兩個或多個列上建立的索引。
CREATE INDEX index_name ON table_name (column1, column2);
建立一個單列索引仍是組合索引,要考慮到在做爲查詢過濾的條件的WHERE子句中使用很是頻繁的列。
列出全部索引:
SELECT * FROM sqlite_master WHERE type='index';
刪除索引:
DROP INDEX index_name;
下面狀況下避免使用索引:
ALTER TABLE
命令不經過執行一個完整的轉儲和數據的重載來修改已有的表。能夠重命名,還能夠再已有的表中添加額外的列。 在SQLite
中,出來重命名錶和在已有的表中添加列,ALTER TABLE
命令不支持其餘操做。
重命名錶名:
ALTER TABLE table_name RENAME new_table_name;
添加額外的列:
ALTER TABLE table_name ADD COLUMN column char(50);
測試發現,不支持直接添加帶有unique
約束的列:
能夠先直接添加一列數據,而後添加unique
索引(惟一索引)。