嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。嵌入式运行模式允许嵌入式数据库通过 SQL 来轻松管理应用程序数据,而不依靠原始的文本文件。嵌入式数据库还提供零配置运行模式,这样可以启用其中一个并运行一个快照
SQL语法
SQL功能 | 命令动词 |
---|---|
数据查询 | SELECT |
数据定义 | CREATE ,DROP,ALTER |
数据操控 | INSERT ,UPDATE,DELETE |
数据控制 | GRANT,REVOKE,DENY |
SQL的语法很像自然语言,每个语句都是一个祈使句,以动词开头,表示要做的动作,
如 select id from foods where name = “Jujyfruit”——一般的SQL语法结构,
SQL由命令组成,每个命令以分号(;)结束,如下面是三个独立的命令:
常量
也称为Literals,表示确切的值,有三种:字符串常数,数据常量和二进制常量
字符串常量如:‘Jerry’ ‘Newman’ ‘JujyFruit’
数字常量 :数字常量有整数,十进制数和科学计数法表示的数
二进制值用如x‘0000’的表示法,其中每个数据是一个16进制数
创建数据库
一 丶创建表
在SQL中,创建和删除数据库对象的语句一般称为数据定义语言,操作这些对象中的数据语言称为数据操作语言
如下定义
CREATE[TEMP] TABLE tablle_name (column_definitions,[constraints];
CREATE TABLE命令至少需要一个表名和一个字段名,命令中table_name表示表名,必须与其他所有的标识符不同。
column_definitions表示一个用逗号分隔的字段列表,每个字段定义包括一个名称,一个域和一个逗号分隔的字段约束表
在SQLite中有5种本地类型:INTTEGER , REAL , TEXT ,BLOB ,NULL
实例
create table foods (id integer primary key,type_id integer,name text)
二丶改变表
你可以用ALTER TABLE命令改变表的结构。SQLite版的ALTER TABLE命令既可以改变表名,也可以增加字段。一般格式为:
ALTER TABLE table { RENAME TO name | ADD COLUMN column_def }
如
sqlite> ALTER TABLE contacts
ADD COLUMN email TEXT NOT NULL DEFAULT ‘’ COLLATE NOCASE;
sqlite> .schema contacts
CREATE TABLE contacts ( id INTEGER PRIMARY KEY,
name TEXT NOT NULL COLLATE NOCASE,
phone TEXT NOT NULL DEFAULT ‘UNKNOWN’,
email TEXT NOT NULL DEFAULT ‘’ COLLATE NOCASE,
UNIQUE (name,phone) );
显示了当前的表定义
。
三丶查询
SELECT <目标列名序列>
FROM <数据源>
[WHERE <检索条件表达式>]
[GROUP BY <分组依据列>]
[HAVING <分组提取条件>]
[ORDER BY <排序依据列>]
基本结构
SELECT <目标列名序列>(需要哪些列)
FROM <表名序列> (从哪些表)
WHERE <查询条件> (根据什么条件)
例如
对于下表
例1. 查询全体学生 的学号与姓名
SELECT Sno,Sname FROM Student
例2,查询全体学生的详细记录
SELECT Sno,Sname,Ssex, Sage, Sdept FROM Student 等价于 SELECT *
FROM Student
比较大小 (<,>,<=,>=,=,<>)
例3.查询计算机系全体学生
SELECT Sname FROM Student
WHERE Sdept=’CS’
例4,查询所有年龄在20岁以下的学生姓名及其年龄
SELECT Sname, Sage FROM Student WHERE Sage < 20
或者 SELECT Sname, Sage FROM Student WHERE NOT Sage >= 20
例5,查询年龄在20~23岁之间的学生的姓名、所在系和年龄
SELECT Sname, Sdept, Sage FROM Student
WHERE Sage BETWEEN 20 AND 23
等价于
SELECT Sname, Sdept, Sage FROM Student
WHERE Sage >=20 AND Sage<=23
例6,查询年龄不在20~23之间的学生姓名、所在系和年龄
ELECT Sname, Sdept, Sage FROM Student
WHERE Sage NOT BETWEEN 20 AND 23
等价于
SELECT Sname, Sdept, Sage FROM Student
WHERE Sage <20 OR Sage>23
例7,查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别。
SELECT Sname, Ssex FROM Student
WHERE Sdept IN(‘IS’,‘CS’, ‘MA’)
等价于
SELECT Sname, Ssex FROM Student
WHERE Sdept=‘IS’ OR
Sdept=‘MA’ OR
Sdept=‘CS’
例8,查询名字中第2个字为“海”字的学生的姓名和学号
SELECT Sname, Sno
FROM Student
WHERE Sname LIKE ‘_海%
例9,查询所有不姓“刘”的学生
SELECT Sname
FROM Student
WHERE Sname NOT LIKE ‘刘%’
涉及空值的查询
空值是未确定的值或其值尚不知道
例如,学生选课,在开学初学生只有选课记录,没有修课成绩,这时成绩一项的值就是空值。
不能用=或<>,只能用IS NULL或IS NOT NULL
例10,查询无成绩的学生的学号和相应的课程号
SELECT Sno, Cno FROM SC
WHERE Grade IS NULL