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
索引(惟一索引)。