嵌入式数据库

嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。嵌入式运行模式允许嵌入式数据库通过 SQL 来轻松管理应用程序数据,而不依靠原始的文本文件。嵌入式数据库还提供零配置运行模式,这样可以启用其中一个并运行一个快照
SQL语法

  1. 数据定义(DDL):用户定义,删除和修改数据模式
  2. 数据查询(DQL):用于查询数据
  3. 数据操控(DML):用于增,删,改数据
  4. 数据控制(DCL):用于控制数据访问权限
SQL功能 命令动词
数据查询 SELECT
数据定义 CREATE ,DROP,ALTER
数据操控 INSERT ,UPDATE,DELETE
数据控制 GRANT,REVOKE,DENY

SQL的语法很像自然语言,每个语句都是一个祈使句,以动词开头,表示要做的动作,
如 select id from foods where name = “Jujyfruit”——一般的SQL语法结构,

SQL由命令组成,每个命令以分号(;)结束,如下面是三个独立的命令:

  1. SELECT id,name FROM foods ;
  2. INSERT INTO foods VALUES (NULL,‘whataburger’);

常量
也称为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张图片
例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 

你可能感兴趣的:(学习)