- 浏览: 121488 次
- 性别:
- 来自: 广州
文章分类
最新评论
1. SQL语法关键字
关键字
描述
Create Table
创建数据表
Alter Table
修改数据表
Drop Table
删除数据表
Create Index
创建索引
Drop Index
删除索引
Create Trigger
创建触发器
Drop Trigger
删除触发器
Create View
创建视图
Drop View
删除视图
Insert
插入数据
Delete
删除数据
Update
更新数据
Select
查询数据
Begin
启动事务
Commit
提交事务
Rollback
回滚事务
2. SQL数据类型
2.1. 本地类型--5种基本类型
数据名称
说明
INTEGER
整数值是全数字(包括正和负)。整数可以是1, 2, 3, 4, 6或 8字节。整数的最大范围(8 bytes)是{-9223372036854775808, 0, +9223372036854775807}。SQLite根据数字的值自动控制整数所占的字节数。
空注:参可变长整数的概念。
REAL
实数是10进制的数值。SQLite使用8字节的符点数来存储实数。
TEXT
文本(TEXT)是字符数据。SQLite支持几种字符编码,包括UTF-8和UTF-16。字符串的大小没有限制。
BLOB
二进制大对象(BLOB)是任意类型的数据。BLOB的大小没有限制。
NULL
NULL表示没有值。SQLite具有对NULL的完全支持。
SQLite通过值的表示法来判断其类型,下面就是SQLite的推理方法:
l SQL语句中用单引号或双引号括起来的文字被指派为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. Create Table
3.1.1. 语法格式
CREATE TABLE [数据库名.]表名(
字段名称1 字段类型 字段约束,
字段名称2 字段类型 字段约束,
字段名称3 字段类型 字段约束,
字段名称4 字段类型 字段约束,
… …
分组约束1,
分组约束2,
… …
);
3.1.2. 字段约束
约束名称
约束说明
NOT NULL
非空,约束强制列不接受 NULL 值,约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录。
PRIMARY KEY
主键,约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表应该都一个主键,并且每个表只能有一个主键。
FOREIGN KEY
外键,约束本字段的值必须存在于另一个表中主键字段,
当使用外键约束时,如果外键在其所依赖的表中不存在,则记录插入失败。
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
--创建商品类别表
--类别编码为主键
--类别名称必须具有唯一性
create table tbl_goods_category(
category_code CHAR(8) primary key, --类别编码
category_name VARCHAR(128) UNIQUE, --类别名称
category_desc VARCHAR(255)); --类别描述
Ø 创建商品信息表tbl_goods_info
--创建商品信息表
--商品编码为主键
--商品名称必须具有唯一性
create table tbl_goods_info(
category_code CHAR(8) , --类别编码
goods_id CHAR(16) primary key, --商品编码
goods_name VARCHAR(128) UNIQUE, --商品名称
goods_unit VARCHAR(8), --商品单位
prime_cost NUMBER(6,2), --进货价格
sale_price NUMBER(6,2), --零售价格
vip_price NUMBER(6,2), --会员价格
remark VARCHAR(255),
FOREIGN KEY (category_code)
REFERENCES tbl_goods_category(category_code)); --备注信息
Ø 创建商品入库单tbl_stock_bill
--创建商品入库单
--商品编码和入库时间为组合主键
create table tbl_stock_bill(
goods_id CHAR(16), --商品编码
stock_time DateTime, --入库时间
stock_amount NUMBER(6,2), --入库数量
prime_cost NUMBER(6,2), --进货价格
primary key(goods_id, stock_time),
FOREIGN KEY (goods_id)
REFERENCES tbl_goods_info(goods_id));
3.2. Alter Table
3.2.1. 语法格式
表重命名
ALTER TABLE [数据库名.]表名 RENAME TO 新表名
添加字段
ALTER TABLE [数据库名.]表名 ADD 字段名称 字段类型 字段约束
3.2.2. 脚本示例
Ø 创建一个学生信息表tbl_student
create table tbl_student(
std_id char(20) primary key,
std_name varchar(16),
std_age integer);
Ø 修改学生信息表名为tbl_student_info
alter table tbl_student rename tbl_student_info
Ø 为学生信息表添加班级字段
alter table tbl_student_info add class char(8)
3.3. Drop Table
3.3.1. 语法格式
DROP TABLE [数据库名.]表名
3.3.2. 脚本示例
删除一个名为tbl_student_info的数据表
DROP TABLE tbl_student_info
4. 索引-Index
4.1. Create Index
4.1.1. 语法格式
CREATE INDEX [数据库名.]索引名称 ON 表名(
字段名称1 [ASC/DESC],
字段名称1 [ASC/DESC],
… …);//在相应的表的列字段或多个列字段上建立相应的索引
4.1.2. 脚本示例
创建一个名为tbl_student的学生信息表,并为该学生信息表创建索引
create table tbl_student(
std_id char(20) primary key,
std_name varchar(16),
std_age integer);
--为学号创建升序索引
create index idx_std_id ON tbl_student(std_id ASC);
--为姓名和年龄创建姓名为升序,年龄为降序的索引
create index idx_name_age ON tbl_student(std_name ASC, std_age DESC);
4.2. Drop Index
4.2.1. 语法格式
DROP INDEX [数据库名.]索引名
4.2.2. 脚本示例
删除一个名为idx_name_age的索引
DROP INDEX idx_name_age
5. 触发器-Trigger
5.1. Create Trigger
5.1.1. 语法格式
CREATE TRIGGER 触发器名称
[BEFORE|AFTER] 数据库事件 ON [数据库名称].表名
[FOR EACH ROW][ WHEN expression]
BEGIN
触发器执行动作
END
数据库事件:
DELETE INSERT
UPDATE
UPDATE OF 字段列表
5.1.2. 脚本示例
假设"customers"表存储了客户信息,"orders"表存储了订单信息,下面的触发器确保当用户改变地址时所有的 关联订单地址均进行相应改变:
CREATE TRIGGER trg_on_update_customer_address
AFTER UPDATE OF address ON customers
BEGIN
UPDATE orders SET address = new.address WHERE customer_name = old.name; (DML语句)
END;
5.2. Drop Trigger
5.2.1. 语法格式
DROP TRIGGER触发器名称
5.2.2. 脚本示例
删除一个名为trg_on_update_customer_address的触发器
DROP TRIGGER trg_on_update_customer_address
6. 视图-View
在 SQL 中,视图是基于SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
6.1. Create View
6.1.1. 语法格式
CREATE VIEW [数据库名称].视图名称 AS Select查询语句
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。
6.1.2. 脚本示例
假设有一个学生数据库,其中有班级表,还有学生信息表
以学生信息表为基本,创建一个班级编号WF1103班的学生信息视图
CREATE VIEW view_student_wf1103 as select * from student where class = ‘WF1103’
6.2. Drop View
6.2.1. 语法格式
DROP VIEW [数据库名称].视图名称
6.2.2. 脚本示例
删除一个名为view_student_wf1103的学生信息表
DROP VIEW view_student_wf1103
7. 数据操作-Insert,Update,Delete
7.1. Insert
7.1.1. 语法格式
INSERT INTO [数据库名称].表名 VALUES(记录内容)//对应表的顺序进行添加和加入值
INSERT INTO [数据库名称].表名(字段列表) VALUES(对应字段内容)//按字段列表添加值
7.1.2. 脚本示例
create table tbl_student(
std_id char(20) primary key,
std_name varchar(16),
std_age integer);
INSERT INTO tbl_student VALUES(‘WF110301’,’张三’,23);
INSERT INTO tbl_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. 脚本示例
UPDATE tbl_student SET std_age=24 where std_id=‘WF110301’
7.3. Delete
7.3.1. 语法格式
DELETE FROM [数据库名称].表名 where 条件表达式
7.3.2. 脚本示例
DELETE FROM tbl_student where std_id=‘WF110301’
8. 数据查询-Select
create table tbl_class(
class_id varchar(8) primary key,
class_name varchar(64),
class_desc varchar(128));
create table tbl_student(
class_id varchar(8),
std_id varchar(16) primary key,
std_name varchar(8),
std_age integer,
std_phone varchar(16),
std_school varchar(40));
8.1. 基本查询
8.1.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
8.1.2. 脚本示例
--查询学生信息表中的所有信息
Select * from tbl_student
--查询学生信息表中所学生的姓名及年龄的信息
Select std_name, std_age from tbl_student
8.2. Where子句
Where子句通过条件表达式筛选满足条件的记录,条件表达式可以使用SQLite中的各种逻辑运算符号对字段进行筛选。
Where的操作符
操作符
描述
=
等于
<>
不等于
>
大于
<
小于
>=
大于等于
<=
小于等于
BETWEEN
在某个范围内
LIKE
搜索某种模式
8.2.1. 语法格式
SELECT [DISTINCT] [*|字段列表]
FROM [数据库名称].表名
WHERE 条件表达式
8.2.2. 脚本示例
--查询学生信息表中学号等于WF110301的学号
Select * from tbl_student
where std_id = ‘WF110301’
--查询学生信息表中所年龄大于23的学生
Select * from tbl_student
where std_age > 23
--查询学生信息表中所有名字中姓‘刘’的学生或着名字最后一个字为‘刚’的学生
Select * from tbl_student
where std_name like '刘%' or std_name like '%刚'
--查询学生信息表中农林大学,并且手机号码中带有6的学生
Select * from tbl_student
where std_school = '农林大学' and std_phone like '%6%'
8.3. Group by子句
GROUP BY子句可以在查询将指定的字段表数值相同的记录合并成一条输出, 它与count(*)函数相结合,可以统计在列表中指字段表数值相同的记录的条数。
8.3.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
GROUP BY 字段1,字段2,… …
SELECT [*|字段列表] [,count(*) as 新的字段名] FROM [数据库名称].表名
GROUP BY 字段1,字段2,… …
8.3.2. 脚本示例
--统计各个学校的学生数
Select std_school, count(*) as std_count from tbl_student
group by std_school, std_age
8.4. Order By子句
ORDER BY子句对所得结果根据表达式排序。
8.4.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
ORDER BY 字段名1 [ASC/DESC],字段名2 [ASC/DESC],… …
8.4.2. 脚本示例
--查询学生信息,并按年龄递减,学号递增的排序方式显示
Select * from tbl_student
order by std_age DESC,std_id ASC
8.5. Limit Offset子句
LIMIT子句限定行数的最大值。负的LIMIT表示无上限。后跟可选的OFFSET说明跳过结果集中的前多少行,Limit Offset在分页显示中十分有用。
8.5.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
Limit 单次最多读取行数 offset 跳过前面行数
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
Limit跳过前面行数,单次最多读取行数
8.5.2. 脚本示例
--查询学生信息,跳过前面10行,获取5 条记录
Select * from tbl_student
Limit 5 offset 10
或 跳过前面10行,获取5 条记录
Select * from tbl_student
Limit 10,5
8.6. 多表联合查询
8.6.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名1, [数据库名称].表名2 …
WHERE 条件表达式 一般的连接
8.6.2. 脚本示例
--查询学生信息表中所有班级为WF1103的学生信息,并在结果中输出班级名称和学员姓名
Select tbl_class.class_name,tbl_student.std_name from tbl_student, tbl_class
where tbl_student.class_id = tbl_class.class_id
8.7. Join子句
JOIN用于根据两个或多个表中的列之间的关系,从这些表中查询数据,JOIN会将两个表的数据合并起来,输出具有两个表有字段的记录。
JOIN对于两个表格来说是相乘的关系,(inner join 与join就是普通的连接)
8.7.1. 语法格式
--在两个表中存在至少都存在一个能够满足条件表达式的匹配时
--INNER JOIN 关键字返回行。INNER JOIN 与 JOIN 是相同的。
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].左表名…
INNER JOIN [数据库名称].右表名
ON 条件表达式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].左表名…
JOIN [数据库名称].右表名
ON 条件表达式
--以左表为主,当左表有存在满足条件的记录时,就会从左表返回所有的行
--即使右表都没有满足条件。
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].左表名…
LEFT JOIN [数据库名称].右表名
ON 条件表达式
8.7.2. 脚本示例
例如,学生信息管理系统中有学生信息和课程两张表,它们的格式和内容分别如下:
Tbl_student
Tbl_course
Ø INNER JOIN示例,查询班级表中的每一位学生需要学习的课程内容:
Select Tbl_student.class_id, Tbl_student.std_id, Tbl_student.std_name, Tbl_course.course, TBL_course.teacher from Tbl_student
INNER JOIN Tbl_course ON Tbl_student.class_id = Tbl_course.class_id
注:由于课程表中没有WF1104班的课程,学生信息表中没有WF1105班的学生,所以使用INNER JOIN时,只会返回两个表同时存在的WF1103班中的学生信息
Ø LEFT JOIN示例,查询班级表中的每一位学生需要学习的课程内容:
Select Tbl_student.class_id, Tbl_student.std_id, Tbl_student.std_name, Tbl_course.course, TBL_course.teacher from Tbl_student
LEFT JOIN Tbl_course ON Tbl_student.class_id = Tbl_course.class_id
注:采用LEFT JOIN无论如何都会返回左表的所有记录,即使右表中没有满足条件的记录,所以,即使课程表中没有WF1104班的课程,在左表中的WF1104班的学生信息 仍然会被返回。
8.8. Union子句
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。(个数和类型相同)
8.8.1. 语法格式
SELECT [*|字段列表] FROM [数据库名称].表名1
UNION
SELECT [*|字段列表] FROM [数据库名称].表名2
SELECT [*|字段列表] FROM [数据库名称].表名1
UNION ALL
SELECT [*|字段列表] FROM [数据库名称].表名2
8.8.2. 脚本示例
9. 事务和锁-Transaction and Lock
9.1. Begin(事务启动)
9.2. Commit(提交)
9.3. Rollback(回滚)
9.4. Sqlite old.db.dump | sqlite3 new.db(这样可以3<-->2.8)
9.5. 运算符号
操作符
类型
作用
||
String
Concatenation
*
Arithmetic
Multiply
/
Arithmetic
Divide
%
Arithmetic
Modulus
+
Arithmetic
Add
–
Arithmetic
Subtract
<<
Bitwise
Right shift
>>
Bitwise
Left shift
&
Logical
And
|
Logical
Or
<
Relational
Less than
<=
Relational
Less than or equal to
>
Relational
Greater than
>=
Relational
Greater than or equal to
=
Relational
Equal to
==
Relational
Equal to
<>
Relational
Not equal to
!=
Relational
Not equal to
IN
Logical
In
AND
Logical
And
OR
Logical
Or
LIKE
Relational
String matching
GLOB
Relational
Filename matching
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()
关键字
描述
Create Table
创建数据表
Alter Table
修改数据表
Drop Table
删除数据表
Create Index
创建索引
Drop Index
删除索引
Create Trigger
创建触发器
Drop Trigger
删除触发器
Create View
创建视图
Drop View
删除视图
Insert
插入数据
Delete
删除数据
Update
更新数据
Select
查询数据
Begin
启动事务
Commit
提交事务
Rollback
回滚事务
2. SQL数据类型
2.1. 本地类型--5种基本类型
数据名称
说明
INTEGER
整数值是全数字(包括正和负)。整数可以是1, 2, 3, 4, 6或 8字节。整数的最大范围(8 bytes)是{-9223372036854775808, 0, +9223372036854775807}。SQLite根据数字的值自动控制整数所占的字节数。
空注:参可变长整数的概念。
REAL
实数是10进制的数值。SQLite使用8字节的符点数来存储实数。
TEXT
文本(TEXT)是字符数据。SQLite支持几种字符编码,包括UTF-8和UTF-16。字符串的大小没有限制。
BLOB
二进制大对象(BLOB)是任意类型的数据。BLOB的大小没有限制。
NULL
NULL表示没有值。SQLite具有对NULL的完全支持。
SQLite通过值的表示法来判断其类型,下面就是SQLite的推理方法:
l SQL语句中用单引号或双引号括起来的文字被指派为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. Create Table
3.1.1. 语法格式
CREATE TABLE [数据库名.]表名(
字段名称1 字段类型 字段约束,
字段名称2 字段类型 字段约束,
字段名称3 字段类型 字段约束,
字段名称4 字段类型 字段约束,
… …
分组约束1,
分组约束2,
… …
);
3.1.2. 字段约束
约束名称
约束说明
NOT NULL
非空,约束强制列不接受 NULL 值,约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录。
PRIMARY KEY
主键,约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表应该都一个主键,并且每个表只能有一个主键。
FOREIGN KEY
外键,约束本字段的值必须存在于另一个表中主键字段,
当使用外键约束时,如果外键在其所依赖的表中不存在,则记录插入失败。
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
--创建商品类别表
--类别编码为主键
--类别名称必须具有唯一性
create table tbl_goods_category(
category_code CHAR(8) primary key, --类别编码
category_name VARCHAR(128) UNIQUE, --类别名称
category_desc VARCHAR(255)); --类别描述
Ø 创建商品信息表tbl_goods_info
--创建商品信息表
--商品编码为主键
--商品名称必须具有唯一性
create table tbl_goods_info(
category_code CHAR(8) , --类别编码
goods_id CHAR(16) primary key, --商品编码
goods_name VARCHAR(128) UNIQUE, --商品名称
goods_unit VARCHAR(8), --商品单位
prime_cost NUMBER(6,2), --进货价格
sale_price NUMBER(6,2), --零售价格
vip_price NUMBER(6,2), --会员价格
remark VARCHAR(255),
FOREIGN KEY (category_code)
REFERENCES tbl_goods_category(category_code)); --备注信息
Ø 创建商品入库单tbl_stock_bill
--创建商品入库单
--商品编码和入库时间为组合主键
create table tbl_stock_bill(
goods_id CHAR(16), --商品编码
stock_time DateTime, --入库时间
stock_amount NUMBER(6,2), --入库数量
prime_cost NUMBER(6,2), --进货价格
primary key(goods_id, stock_time),
FOREIGN KEY (goods_id)
REFERENCES tbl_goods_info(goods_id));
3.2. Alter Table
3.2.1. 语法格式
表重命名
ALTER TABLE [数据库名.]表名 RENAME TO 新表名
添加字段
ALTER TABLE [数据库名.]表名 ADD 字段名称 字段类型 字段约束
3.2.2. 脚本示例
Ø 创建一个学生信息表tbl_student
create table tbl_student(
std_id char(20) primary key,
std_name varchar(16),
std_age integer);
Ø 修改学生信息表名为tbl_student_info
alter table tbl_student rename tbl_student_info
Ø 为学生信息表添加班级字段
alter table tbl_student_info add class char(8)
3.3. Drop Table
3.3.1. 语法格式
DROP TABLE [数据库名.]表名
3.3.2. 脚本示例
删除一个名为tbl_student_info的数据表
DROP TABLE tbl_student_info
4. 索引-Index
4.1. Create Index
4.1.1. 语法格式
CREATE INDEX [数据库名.]索引名称 ON 表名(
字段名称1 [ASC/DESC],
字段名称1 [ASC/DESC],
… …);//在相应的表的列字段或多个列字段上建立相应的索引
4.1.2. 脚本示例
创建一个名为tbl_student的学生信息表,并为该学生信息表创建索引
create table tbl_student(
std_id char(20) primary key,
std_name varchar(16),
std_age integer);
--为学号创建升序索引
create index idx_std_id ON tbl_student(std_id ASC);
--为姓名和年龄创建姓名为升序,年龄为降序的索引
create index idx_name_age ON tbl_student(std_name ASC, std_age DESC);
4.2. Drop Index
4.2.1. 语法格式
DROP INDEX [数据库名.]索引名
4.2.2. 脚本示例
删除一个名为idx_name_age的索引
DROP INDEX idx_name_age
5. 触发器-Trigger
5.1. Create Trigger
5.1.1. 语法格式
CREATE TRIGGER 触发器名称
[BEFORE|AFTER] 数据库事件 ON [数据库名称].表名
[FOR EACH ROW][ WHEN expression]
BEGIN
触发器执行动作
END
数据库事件:
DELETE INSERT
UPDATE
UPDATE OF 字段列表
5.1.2. 脚本示例
假设"customers"表存储了客户信息,"orders"表存储了订单信息,下面的触发器确保当用户改变地址时所有的 关联订单地址均进行相应改变:
CREATE TRIGGER trg_on_update_customer_address
AFTER UPDATE OF address ON customers
BEGIN
UPDATE orders SET address = new.address WHERE customer_name = old.name; (DML语句)
END;
5.2. Drop Trigger
5.2.1. 语法格式
DROP TRIGGER触发器名称
5.2.2. 脚本示例
删除一个名为trg_on_update_customer_address的触发器
DROP TRIGGER trg_on_update_customer_address
6. 视图-View
在 SQL 中,视图是基于SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
6.1. Create View
6.1.1. 语法格式
CREATE VIEW [数据库名称].视图名称 AS Select查询语句
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。
6.1.2. 脚本示例
假设有一个学生数据库,其中有班级表,还有学生信息表
以学生信息表为基本,创建一个班级编号WF1103班的学生信息视图
CREATE VIEW view_student_wf1103 as select * from student where class = ‘WF1103’
6.2. Drop View
6.2.1. 语法格式
DROP VIEW [数据库名称].视图名称
6.2.2. 脚本示例
删除一个名为view_student_wf1103的学生信息表
DROP VIEW view_student_wf1103
7. 数据操作-Insert,Update,Delete
7.1. Insert
7.1.1. 语法格式
INSERT INTO [数据库名称].表名 VALUES(记录内容)//对应表的顺序进行添加和加入值
INSERT INTO [数据库名称].表名(字段列表) VALUES(对应字段内容)//按字段列表添加值
7.1.2. 脚本示例
create table tbl_student(
std_id char(20) primary key,
std_name varchar(16),
std_age integer);
INSERT INTO tbl_student VALUES(‘WF110301’,’张三’,23);
INSERT INTO tbl_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. 脚本示例
UPDATE tbl_student SET std_age=24 where std_id=‘WF110301’
7.3. Delete
7.3.1. 语法格式
DELETE FROM [数据库名称].表名 where 条件表达式
7.3.2. 脚本示例
DELETE FROM tbl_student where std_id=‘WF110301’
8. 数据查询-Select
create table tbl_class(
class_id varchar(8) primary key,
class_name varchar(64),
class_desc varchar(128));
create table tbl_student(
class_id varchar(8),
std_id varchar(16) primary key,
std_name varchar(8),
std_age integer,
std_phone varchar(16),
std_school varchar(40));
8.1. 基本查询
8.1.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
8.1.2. 脚本示例
--查询学生信息表中的所有信息
Select * from tbl_student
--查询学生信息表中所学生的姓名及年龄的信息
Select std_name, std_age from tbl_student
8.2. Where子句
Where子句通过条件表达式筛选满足条件的记录,条件表达式可以使用SQLite中的各种逻辑运算符号对字段进行筛选。
Where的操作符
操作符
描述
=
等于
<>
不等于
>
大于
<
小于
>=
大于等于
<=
小于等于
BETWEEN
在某个范围内
LIKE
搜索某种模式
8.2.1. 语法格式
SELECT [DISTINCT] [*|字段列表]
FROM [数据库名称].表名
WHERE 条件表达式
8.2.2. 脚本示例
--查询学生信息表中学号等于WF110301的学号
Select * from tbl_student
where std_id = ‘WF110301’
--查询学生信息表中所年龄大于23的学生
Select * from tbl_student
where std_age > 23
--查询学生信息表中所有名字中姓‘刘’的学生或着名字最后一个字为‘刚’的学生
Select * from tbl_student
where std_name like '刘%' or std_name like '%刚'
--查询学生信息表中农林大学,并且手机号码中带有6的学生
Select * from tbl_student
where std_school = '农林大学' and std_phone like '%6%'
8.3. Group by子句
GROUP BY子句可以在查询将指定的字段表数值相同的记录合并成一条输出, 它与count(*)函数相结合,可以统计在列表中指字段表数值相同的记录的条数。
8.3.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
GROUP BY 字段1,字段2,… …
SELECT [*|字段列表] [,count(*) as 新的字段名] FROM [数据库名称].表名
GROUP BY 字段1,字段2,… …
8.3.2. 脚本示例
--统计各个学校的学生数
Select std_school, count(*) as std_count from tbl_student
group by std_school, std_age
8.4. Order By子句
ORDER BY子句对所得结果根据表达式排序。
8.4.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
ORDER BY 字段名1 [ASC/DESC],字段名2 [ASC/DESC],… …
8.4.2. 脚本示例
--查询学生信息,并按年龄递减,学号递增的排序方式显示
Select * from tbl_student
order by std_age DESC,std_id ASC
8.5. Limit Offset子句
LIMIT子句限定行数的最大值。负的LIMIT表示无上限。后跟可选的OFFSET说明跳过结果集中的前多少行,Limit Offset在分页显示中十分有用。
8.5.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
Limit 单次最多读取行数 offset 跳过前面行数
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名
Limit跳过前面行数,单次最多读取行数
8.5.2. 脚本示例
--查询学生信息,跳过前面10行,获取5 条记录
Select * from tbl_student
Limit 5 offset 10
或 跳过前面10行,获取5 条记录
Select * from tbl_student
Limit 10,5
8.6. 多表联合查询
8.6.1. 语法格式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].表名1, [数据库名称].表名2 …
WHERE 条件表达式 一般的连接
8.6.2. 脚本示例
--查询学生信息表中所有班级为WF1103的学生信息,并在结果中输出班级名称和学员姓名
Select tbl_class.class_name,tbl_student.std_name from tbl_student, tbl_class
where tbl_student.class_id = tbl_class.class_id
8.7. Join子句
JOIN用于根据两个或多个表中的列之间的关系,从这些表中查询数据,JOIN会将两个表的数据合并起来,输出具有两个表有字段的记录。
JOIN对于两个表格来说是相乘的关系,(inner join 与join就是普通的连接)
8.7.1. 语法格式
--在两个表中存在至少都存在一个能够满足条件表达式的匹配时
--INNER JOIN 关键字返回行。INNER JOIN 与 JOIN 是相同的。
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].左表名…
INNER JOIN [数据库名称].右表名
ON 条件表达式
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].左表名…
JOIN [数据库名称].右表名
ON 条件表达式
--以左表为主,当左表有存在满足条件的记录时,就会从左表返回所有的行
--即使右表都没有满足条件。
SELECT [DISTINCT] [*|字段列表] FROM [数据库名称].左表名…
LEFT JOIN [数据库名称].右表名
ON 条件表达式
8.7.2. 脚本示例
例如,学生信息管理系统中有学生信息和课程两张表,它们的格式和内容分别如下:
Tbl_student
Tbl_course
Ø INNER JOIN示例,查询班级表中的每一位学生需要学习的课程内容:
Select Tbl_student.class_id, Tbl_student.std_id, Tbl_student.std_name, Tbl_course.course, TBL_course.teacher from Tbl_student
INNER JOIN Tbl_course ON Tbl_student.class_id = Tbl_course.class_id
注:由于课程表中没有WF1104班的课程,学生信息表中没有WF1105班的学生,所以使用INNER JOIN时,只会返回两个表同时存在的WF1103班中的学生信息
Ø LEFT JOIN示例,查询班级表中的每一位学生需要学习的课程内容:
Select Tbl_student.class_id, Tbl_student.std_id, Tbl_student.std_name, Tbl_course.course, TBL_course.teacher from Tbl_student
LEFT JOIN Tbl_course ON Tbl_student.class_id = Tbl_course.class_id
注:采用LEFT JOIN无论如何都会返回左表的所有记录,即使右表中没有满足条件的记录,所以,即使课程表中没有WF1104班的课程,在左表中的WF1104班的学生信息 仍然会被返回。
8.8. Union子句
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。(个数和类型相同)
8.8.1. 语法格式
SELECT [*|字段列表] FROM [数据库名称].表名1
UNION
SELECT [*|字段列表] FROM [数据库名称].表名2
SELECT [*|字段列表] FROM [数据库名称].表名1
UNION ALL
SELECT [*|字段列表] FROM [数据库名称].表名2
8.8.2. 脚本示例
9. 事务和锁-Transaction and Lock
9.1. Begin(事务启动)
9.2. Commit(提交)
9.3. Rollback(回滚)
9.4. Sqlite old.db.dump | sqlite3 new.db(这样可以3<-->2.8)
9.5. 运算符号
操作符
类型
作用
||
String
Concatenation
*
Arithmetic
Multiply
/
Arithmetic
Divide
%
Arithmetic
Modulus
+
Arithmetic
Add
–
Arithmetic
Subtract
<<
Bitwise
Right shift
>>
Bitwise
Left shift
&
Logical
And
|
Logical
Or
<
Relational
Less than
<=
Relational
Less than or equal to
>
Relational
Greater than
>=
Relational
Greater than or equal to
=
Relational
Equal to
==
Relational
Equal to
<>
Relational
Not equal to
!=
Relational
Not equal to
IN
Logical
In
AND
Logical
And
OR
Logical
Or
LIKE
Relational
String matching
GLOB
Relational
Filename matching
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()
相关推荐
标题中的"Sql server 转sqlite"指的是将数据从Microsoft SQL Server数据库迁移至SQLite数据库的过程。这通常是由于项目需求变化、轻量级应用部署或移动设备应用等原因导致的。SQLite是一个开源、轻量级的嵌入式...
access库转sqlite库 1、可以转换access表中的主键、自增长字段、字段类型、字段长度、索引等 2、因sqlite不支持表属性(表描述)、字段描述, 程序会把这些信息存入access_table,access_column表中以供参考 3、如果...
标题中的“SQLServer转SQLite源码”表明这是一个用于将数据从Microsoft SQL Server迁移至SQLite数据库的程序源代码。SQLite是一个轻量级、自包含的数据库引擎,常用于嵌入式系统和个人项目,因为它不需要单独的...
【Excel转Sqlite3工具】是一款实用的小型应用程序,由个人开发者设计,旨在方便用户将Excel数据快速导入到SQLite3数据库中。这个工具的核心功能是将.xls格式的电子表格文件转换为.db格式的SQLite数据库文件。这样的...
SQLServer和SQLite是两种广泛应用的关系型数据库管理系统。SQLServer是由微软公司开发的,适用于大型企业级应用,提供了强大的数据处理能力和高可用性。而SQLite则是一个轻量级、开源的数据库,适合嵌入式系统和个人...
将sqlserver数据转换sqlite数据工具中文 1、解压缩后运行Converter.exe 2、建立sqlserver、sqlite连接数据后,点击“开始迁移数据”按钮下一步,选择要导出的表就可以
1. Shapefile转SQLite: - **转换工具**:GDAL/OGR库是一个常用的开源工具,它提供了将Shapefile转换为SQLite的功能。你可以使用命令行工具 ogr2ogr 来执行这个操作。 - **命令示例**:`ogr2ogr -f "SQLite" ...
标题“Access转Sqlite.rar”和描述中的关键词表明,这个压缩包可能包含了关于将Microsoft Access数据库转换为SQLite数据库的相关工具或教程。Access是一款由微软开发的关系型数据库管理系统(RDBMS),而SQLite则是...
标题中的“sqlserver转换sqlite”指的是将Microsoft SQL Server数据库的数据迁移至SQLite数据库的过程。这是一个常见的需求,尤其是在需要轻量级数据库、跨平台支持或者离线数据存储的场景中。SQL Server是企业级的...
程序功能:Access数据库数据转到Sqlite数据库中。程序过程:本程序可以将Access数据库转换为SQLite数据库,生成的SQLite数据库与Access数据库有相同的数据库名和结构,并同时将Access数据库的数据导出到SQLite数据库...
标题 "SQLServer转SQLite" 描述的是一个工具,它能够帮助用户将数据从Microsoft SQL Server迁移至SQLite数据库系统。这个工具可能是一个自包含的应用程序,由开发者从Code Project获取并进行了改进,添加了一些实用...
在“易语言Access转Sqlite”这个主题中,我们主要讨论的是如何使用易语言来实现Access数据库向Sqlite数据库的转换。 Access是由微软开发的关系型数据库管理系统,常用于小型企业或个人数据管理,而Sqlite则是一个轻...
标题中的“Access mdb 转 sqlite 数据库java代码”指的是使用Java编程语言将Microsoft Access(mdb)数据库转换为SQLite数据库。Access是微软公司的一款关系型数据库管理系统,而SQLite是一款轻量级、开源的嵌入式...
在"易语言源码Access转Sqlite.rar"这个压缩包中,我们可以看到一个针对数据库转换的项目,主要目标是将基于Microsoft Access的数据迁移到SQLite数据库系统。 Access是微软公司开发的一款关系型数据库管理系统,它...
标题中的“sql 转换成 sqlite 源代码”指的是一个项目或工具,它提供了将传统的SQL数据库(如MySQL、PostgreSQL、Oracle等)的数据转换为SQLite数据库的解决方案。SQLite是一个轻量级的、文件式的数据库系统,常用于...
access库转sqlite库 1、可以转换access表中的主键、自增长字段、字段类型、字段长度、索引等 2、因sqlite不支持表属性(表描述)、字段描述, 程序会把这些信息存入access_table,access_column表中以供参考 3、如果...
本资源提供了一个实用工具,将SqlServer数据库转换为Sqlite数据库文件,这对于那些希望在轻量级环境中运行应用或者需要离线数据存储的开发者来说是非常有价值的。以下是关于这个转换过程、涉及的技术以及如何利用...
标题中的“SQLserver转Sqlite源码”指的是一个软件或工具的源代码,该工具能够将数据从SQL Server数据库迁移至SQLite数据库。SQL Server是一种流行的关系型数据库管理系统,广泛应用于大型企业级应用;而SQLite则是...
《Access转SQLite:易语言项目源码解析及应用》 在信息技术领域,数据库管理系统(DBMS)扮演着至关重要的角色,它们是存储、管理和检索数据的核心工具。本项目以“Access转SQLite”为主题,提供了易语言编写的项目...