【转】SQLite

jasenwan 2015-12-25

1.SQL语法关键字

关键字

描述

CreateTable

创建数据表

AlterTable

修改数据表

DropTable

删除数据表

CreateIndex

创建索引

DropIndex

删除索引

CreateTrigger

创建触发器

DropTrigger

删除触发器

CreateView

创建视图

DropView

删除视图

Insert

插入数据

Delete

删除数据

Update

更新数据

Select

查询数据

Begin

启动事务

Commit

提交事务

Rollback

回滚事务

2.SQL数据类型

2.1.本地类型--5种基本类型

数据名称

说明

INTEGER

整数值是全数字(包括正和负)。整数可以是1,2,3,4,6或8字节。整数的最大范围(8bytes)是{-9223372036854775808,0,+9223372036854775807}。SQLite根据数字的值自动控制整数所占的字节数。

空注:参可变长整数的概念。

REAL

实数是10进制的数值。SQLite使用8字节的符点数来存储实数。

TEXT

文本(TEXT)是字符数据。SQLite支持几种字符编码,包括UTF-8和UTF-16。字符串的大小没有限制。

BLOB

二进制大对象(BLOB)是任意类型的数据。BLOB的大小没有限制。

NULL

NULL表示没有值。SQLite具有对NULL的完全支持。

SQLite通过值的表示法来判断其类型,下面就是SQLite的推理方法:

lSQL语句中用单引号或双引号括起来的文字被指派为TEXT。

l如果文字是未用引号括起来的数据,并且没有小数点和指数,被指派为INTEGER。

l如果文字是未用引号括起来的数据,并且带有小数点或指数,被指派为REAL。

l用NULL说明的值被指派为NULL存储类。

l如果一个值的格式为X'ABCD',其中ABCD为16进制数字,则该值被指派为BLOB。X前缀大小写皆可。

2.2.兼容的SQL92类型

数据类型

类型描述

对应类型

integer(size)

int(size)

smallint(size)

tinyint(size)

仅容纳整数。在括号内规定数字的最大位数。

INTEGER

decimal(size,d)

numeric(size,d)

容纳带有小数的数字。

"size"规定数字的最大位数。"d"规定小数点右侧的最多位数。

REAL

char(size)

容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。

在括号中规定字符串的长度。

TEXT

varchar(size)

容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。

在括号中规定字符串的最大长度。

TEXT

date(yyyymmdd)

容纳日期。

TEXT

3.表-Table

3.1.CreateTable

3.1.1.语法格式

CREATETABLE[数据库名.]表名(

字段名称1字段类型字段约束,

字段名称2字段类型字段约束,

字段名称3字段类型字段约束,

字段名称4字段类型字段约束,

……

分组约束1,

分组约束2,

……

);

3.1.2.字段约束

约束名称

约束说明

NOTNULL

非空,约束强制列不接受NULL值,约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录。

PRIMARYKEY

主键,约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含NULL值。

每个表应该都一个主键,并且每个表只能有一个主键。

FOREIGNKEY

外键,约束本字段的值必须存在于另一个表中主键字段,

当使用外键约束时,如果外键在其所依赖的表中不存在,则记录插入失败。

UNIQUE

唯一性,约束唯一标识数据库表中的每条记录,即插入的字段值不可重复,唯一性约束可以包含NULL值,但每张表也只能有一个记录为NULL值。

DEFAULT

默认值,约束字段的默认值,如果插入数据时没有提供该字段的数值,则会使用默认值进行填充。

3.1.3.数据字典

表名:tbl_goods_category

描述:商品类别

字段名称

字段类型

字段长度

字段描述

category_code

CHAR

8

类别编码

category_name

VARCHAR

128

类别名称

category_desc

VARCHAR

255

类别描述

表名:tbl_goods_info

描述:商品信息

字段名称

字段类型

字段长度

字段描述

category_code

CHAR

8

类别编码

goods_id

CHAR

16

商品编码

goods_name

VARCHAR

128

商品名称

goods_unit

VARCHAR

8

商品单位

prime_cost

NUMBER

(6,2)

进货价格

sale_price

NUMBER

(6,2)

零售价格

vip_price

NUMBER

(6,2)

会员价格

remark

VARCHAR

255

备注信息

表名:tbl_stock_bill

描述:商品入库单

字段名称

字段类型

字段长度

字段描述

goods_id

CHAR

16

商品编码

bill_id

CHAR

20

进货单单号

stock_time

DateTime

入库时间

stock_amount

NUMBER

(6,2)

入库数量

prime_cost

NUMBER

(6,2)

进货价格

3.1.4.脚本示例

Ø创建商品类别表tbl_goods_category

--创建商品类别表

--类别编码为主键

--类别名称必须具有唯一性

createtabletbl_goods_category(

category_codeCHAR(8)primarykey,--类别编码

category_nameVARCHAR(128)UNIQUE,--类别名称

category_descVARCHAR(255));--类别描述

Ø创建商品信息表tbl_goods_info

--创建商品信息表

--商品编码为主键

--商品名称必须具有唯一性

createtabletbl_goods_info(

category_codeCHAR(8),--类别编码

goods_idCHAR(16)primarykey,--商品编码

goods_nameVARCHAR(128)UNIQUE,--商品名称

goods_unitVARCHAR(8),--商品单位

prime_costNUMBER(6,2),--进货价格

sale_priceNUMBER(6,2),--零售价格

vip_priceNUMBER(6,2),--会员价格

remarkVARCHAR(255),

FOREIGNKEY(category_code)

REFERENCEStbl_goods_category(category_code));--备注信息

Ø创建商品入库单tbl_stock_bill

--创建商品入库单

--商品编码和入库时间为组合主键

createtabletbl_stock_bill(

goods_idCHAR(16),--商品编码

stock_timeDateTime,--入库时间

stock_amountNUMBER(6,2),--入库数量

prime_costNUMBER(6,2),--进货价格

primarykey(goods_id,stock_time),

FOREIGNKEY(goods_id)

REFERENCEStbl_goods_info(goods_id));

3.2.AlterTable

3.2.1.语法格式

表重命名

ALTERTABLE[数据库名.]表名RENAMETO新表名

添加字段

ALTERTABLE[数据库名.]表名ADD字段名称字段类型字段约束

3.2.2.脚本示例

Ø创建一个学生信息表tbl_student

createtabletbl_student(

std_idchar(20)primarykey,

std_namevarchar(16),

std_ageinteger);

Ø修改学生信息表名为tbl_student_info

altertabletbl_studentrenametbl_student_info

Ø为学生信息表添加班级字段

altertabletbl_student_infoaddclasschar(8)

3.3.DropTable

3.3.1.语法格式

DROPTABLE[数据库名.]表名

3.3.2.脚本示例

删除一个名为tbl_student_info的数据表

DROPTABLEtbl_student_info

4.索引-Index

 4.1.CreateIndex

4.1.1.语法格式

CREATEINDEX[数据库名.]索引名称ON表名(

字段名称1[ASC/DESC],

字段名称1[ASC/DESC],

……);//在相应的表的列字段或多个列字段上建立相应的索引

4.1.2.脚本示例

创建一个名为tbl_student的学生信息表,并为该学生信息表创建索引

createtabletbl_student(

std_idchar(20)primarykey,

std_namevarchar(16),

std_ageinteger);

--为学号创建升序索引

createindexidx_std_idONtbl_student(std_idASC);

--为姓名和年龄创建姓名为升序,年龄为降序的索引

createindexidx_name_ageONtbl_student(std_nameASC,std_ageDESC);

4.2.DropIndex

4.2.1.语法格式

DROPINDEX[数据库名.]索引名

4.2.2.脚本示例

删除一个名为idx_name_age的索引

DROPINDEXidx_name_age

5.触发器-Trigger

 5.1.CreateTrigger

5.1.1.语法格式

CREATETRIGGER触发器名称

[BEFORE|AFTER]数据库事件ON[数据库名称].表名

[FOREACHROW][WHENexpression]

BEGIN

触发器执行动作

END

数据库事件:

DELETEINSERT

UPDATE

UPDATEOF字段列表

5.1.2.脚本示例

 假设"customers"表存储了客户信息,"orders"表存储了订单信息,下面的触发器确保当用户改变地址时所有的关联订单地址均进行相应改变:

CREATETRIGGERtrg_on_update_customer_address

AFTERUPDATEOFaddressONcustomers

BEGIN

UPDATEordersSETaddress=new.addressWHEREcustomer_name=old.name;(DML语句)

END;

5.2.DropTrigger

5.2.1.语法格式

DROPTRIGGER触发器名称

5.2.2.脚本示例

删除一个名为trg_on_update_customer_address的触发器

DROPTRIGGERtrg_on_update_customer_address

6.视图-View

在SQL中,视图是基于SQL语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加SQL函数、WHERE以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。

 6.1.CreateView

6.1.1.语法格式

CREATEVIEW[数据库名称].视图名称ASSelect查询语句

注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用SQL语句来重建数据。

6.1.2.脚本示例

假设有一个学生数据库,其中有班级表,还有学生信息表

以学生信息表为基本,创建一个班级编号WF1103班的学生信息视图

CREATEVIEWview_student_wf1103asselect*fromstudentwhereclass=‘WF1103’

6.2.DropView

6.2.1.语法格式

DROPVIEW[数据库名称].视图名称

6.2.2.脚本示例

删除一个名为view_student_wf1103的学生信息表

DROPVIEWview_student_wf1103

7.数据操作-Insert,Update,Delete

7.1.Insert

7.1.1.语法格式

INSERTINTO[数据库名称].表名VALUES(记录内容)//对应表的顺序进行添加和加入值

INSERTINTO[数据库名称].表名(字段列表)VALUES(对应字段内容)//按字段列表添加值

7.1.2.脚本示例

createtabletbl_student(

std_idchar(20)primarykey,

std_namevarchar(16),

std_ageinteger);

INSERTINTOtbl_studentVALUES(‘WF110301’,’张三’,23);

INSERTINTOtbl_student(std_id,std_name,std_age)VALUES(‘WF110301’,’张三’,23);

7.2.Update

7.2.1.语法格式

UPDATE[数据库名称].表名SET字段1=字段1值,字段2=字段2值…where条件表达式

7.2.2.脚本示例

UPDATEtbl_studentSETstd_age=24wherestd_id=‘WF110301’

7.3.Delete

7.3.1.语法格式

DELETEFROM[数据库名称].表名where条件表达式

7.3.2.脚本示例

DELETEFROMtbl_studentwherestd_id=‘WF110301’

8.数据查询-Select

createtabletbl_class(

class_idvarchar(8)primarykey,

class_namevarchar(64),

class_descvarchar(128));

createtabletbl_student(

class_idvarchar(8),

std_idvarchar(16)primarykey,

std_namevarchar(8),

std_ageinteger,

std_phonevarchar(16),

std_schoolvarchar(40));

8.1.基本查询

8.1.1.语法格式

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].表名

8.1.2.脚本示例

--查询学生信息表中的所有信息

Select*fromtbl_student

--查询学生信息表中所学生的姓名及年龄的信息

Selectstd_name,std_agefromtbl_student

8.2.Where子句

Where子句通过条件表达式筛选满足条件的记录,条件表达式可以使用SQLite中的各种逻辑运算符号对字段进行筛选。

Where的操作符

操作符

描述

=

等于

<>

不等于

>

大于

<

小于

>=

大于等于

<=

小于等于

BETWEEN

在某个范围内

LIKE

搜索某种模式

8.2.1.语法格式

SELECT[DISTINCT][*|字段列表]

FROM[数据库名称].表名

WHERE条件表达式

8.2.2.脚本示例

--查询学生信息表中学号等于WF110301的学号

Select*fromtbl_student

wherestd_id=‘WF110301’

--查询学生信息表中所年龄大于23的学生

Select*fromtbl_student

wherestd_age>23

--查询学生信息表中所有名字中姓‘刘’的学生或着名字最后一个字为‘刚’的学生

Select*fromtbl_student

wherestd_namelike'刘%'orstd_namelike'%刚'

--查询学生信息表中农林大学,并且手机号码中带有6的学生

Select*fromtbl_student

wherestd_school='农林大学'andstd_phonelike'%6%'

8.3.Groupby子句

GROUPBY子句可以在查询将指定的字段表数值相同的记录合并成一条输出,它与count(*)函数相结合,可以统计在列表中指字段表数值相同的记录的条数。

8.3.1.语法格式

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].表名

GROUPBY字段1,字段2,……

SELECT[*|字段列表][,count(*)as新的字段名]FROM[数据库名称].表名

GROUPBY字段1,字段2,……

8.3.2.脚本示例

--统计各个学校的学生数

Selectstd_school,count(*)asstd_countfromtbl_student

groupbystd_school,std_age

8.4.OrderBy子句

ORDERBY子句对所得结果根据表达式排序。

8.4.1.语法格式

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].表名

ORDERBY字段名1[ASC/DESC],字段名2[ASC/DESC],……

8.4.2.脚本示例

--查询学生信息,并按年龄递减,学号递增的排序方式显示

Select*fromtbl_student

orderbystd_ageDESC,std_idASC

8.5.LimitOffset子句

LIMIT子句限定行数的最大值。负的LIMIT表示无上限。后跟可选的OFFSET说明跳过结果集中的前多少行,LimitOffset在分页显示中十分有用。

8.5.1.语法格式

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].表名

Limit单次最多读取行数offset跳过前面行数

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].表名

Limit跳过前面行数,单次最多读取行数

8.5.2.脚本示例

--查询学生信息,跳过前面10行,获取5条记录

Select*fromtbl_student

Limit5offset10

或跳过前面10行,获取5条记录

Select*fromtbl_student

Limit10,5

8.6.多表联合查询

8.6.1.语法格式

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].表名1,[数据库名称].表名2…

WHERE条件表达式一般的连接

8.6.2.脚本示例

--查询学生信息表中所有班级为WF1103的学生信息,并在结果中输出班级名称和学员姓名

Selecttbl_class.class_name,tbl_student.std_namefromtbl_student,tbl_class

wheretbl_student.class_id=tbl_class.class_id

8.7.Join子句

JOIN用于根据两个或多个表中的列之间的关系,从这些表中查询数据,JOIN会将两个表的数据合并起来,输出具有两个表有字段的记录。

JOIN对于两个表格来说是相乘的关系,(innerjoin与join就是普通的连接)

8.7.1.语法格式

--在两个表中存在至少都存在一个能够满足条件表达式的匹配时

--INNERJOIN关键字返回行。INNERJOIN与JOIN是相同的。

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].左表名…

INNERJOIN[数据库名称].右表名

ON条件表达式

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].左表名…

JOIN[数据库名称].右表名

ON条件表达式

--以左表为主,当左表有存在满足条件的记录时,就会从左表返回所有的行

--即使右表都没有满足条件。

SELECT[DISTINCT][*|字段列表]FROM[数据库名称].左表名…

LEFTJOIN[数据库名称].右表名

ON条件表达式

8.7.2.脚本示例

例如,学生信息管理系统中有学生信息和课程两张表,它们的格式和内容分别如下:

Tbl_student

Tbl_course

ØINNERJOIN示例,查询班级表中的每一位学生需要学习的课程内容:

SelectTbl_student.class_id,Tbl_student.std_id,Tbl_student.std_name,Tbl_course.course,TBL_course.teacherfromTbl_student

INNERJOINTbl_courseONTbl_student.class_id=Tbl_course.class_id

注:由于课程表中没有WF1104班的课程,学生信息表中没有WF1105班的学生,所以使用INNERJOIN时,只会返回两个表同时存在的WF1103班中的学生信息

ØLEFTJOIN示例,查询班级表中的每一位学生需要学习的课程内容:

SelectTbl_student.class_id,Tbl_student.std_id,Tbl_student.std_name,Tbl_course.course,TBL_course.teacherfromTbl_student

LEFTJOINTbl_courseONTbl_student.class_id=Tbl_course.class_id

注:采用LEFTJOIN无论如何都会返回左表的所有记录,即使右表中没有满足条件的记录,所以,即使课程表中没有WF1104班的课程,在左表中的WF1104班的学生信息      仍然会被返回。

8.8.Union子句

UNION操作符用于合并两个或多个SELECT语句的结果集。

请注意,UNION内部的SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。(个数和类型相同)

8.8.1.语法格式

SELECT[*|字段列表]FROM[数据库名称].表名1

UNION

SELECT[*|字段列表]FROM[数据库名称].表名2

SELECT[*|字段列表]FROM[数据库名称].表名1

UNIONALL

SELECT[*|字段列表]FROM[数据库名称].表名2

8.8.2.脚本示例

9.事务和锁-TransactionandLock

9.1.Begin(事务启动)

9.2.Commit(提交)

9.3.Rollback(回滚)

9.4.Sqliteold.db.dump|sqlite3new.db(这样可以3<-->2.8)

9.5.运算符号

操作符

类型

作用

||

String

Concatenation

*

Arithmetic

Multiply

/

Arithmetic

Divide

%

Arithmetic

Modulus

+

Arithmetic

Add

Arithmetic

Subtract

<<

Bitwise

Rightshift

>>

Bitwise

Leftshift

&

Logical

And

|

Logical

Or

<

Relational

Lessthan

<=

Relational

Lessthanorequalto

>

Relational

Greaterthan

>=

Relational

Greaterthanorequalto

=

Relational

Equalto

==

Relational

Equalto

<>

Relational

Notequalto

!=

Relational

Notequalto

IN

Logical

In

AND

Logical

And

OR

Logical

Or

LIKE

Relational

Stringmatching

GLOB

Relational

Filenamematching

10.内建函数

SQLite内建函数表算术函数abs(X)返回给定数字表达式的绝对值。max(X,Y[,...])返回表达式的最大值。min(X,Y[,...])返回表达式的最小值。random(*)返回随机数。round(X[,Y])返回数字表达式并四舍五入为指定的长度或精度。字符处理函数length(X)返回给定字符串表达式的字符个数。lower(X)将大写字符数据转换为小写字符数据后返回字符表达式。upper(X)返回将小写字符数据转换为大写的字符表达式。substr(X,Y,Z)返回表达式的一部分。randstr()quote(A)like(A,B)确定给定的字符串是否与指定的模式匹配。glob(A,B)条件判断函数coalesce(X,Y[,...])

ifnull(X,Y)

nullif(X,Y)集合函数avg(X)返回组中值的平均值。count(X)返回组中项目的数量。max(X)返回组中值的最大值。min(X)返回组中值的最小值。sum(X)返回表达式中所有值的和。其他函数typeof(X)返回数据的类型。last_insert_rowid()返回最后插入的数据的ID。sqlite_version(*)返回SQLite的版本。change_count()返回受上一语句影响的行数。last_statement_change_count()

相关推荐

我的剑就是你的剑 / 0评论 2020-02-01