cascade sqlite 数据库_sqlite数据库

目录

正文

进入https://www.sqlite.org/,下载for widows和sqlite-amalgamation-….zip的全部文件;

创建文件夹sqlite3_32(bin,include,lib)或sqlite3_64(bin,include,lib);

创建环境路径E:\CodeBlocks\MinGW\bin; E:\sqlite3_32\bin,这一步不是必须的,但如果经常用命令行的话会方便很多;

sqlite3_32/lib路径下命令行执行dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a;

Build options->Search directories->Compiler选入E:\sqlite3_32\include、Build options->Search directories->Linker选入E:\sqlite3_32\lib、Build options->Linker settings加入E:\sqlite3_32\lib\libsqlite3dll.a;

如果出现0xc000007b的错误提示,表示使用的32或64位版本和机器不兼容(比如32位的电脑上用了64位的dll)。

1.进入和定义数据库

sqlite3的shell命令

sqlite3

2.基本表的定义、删除、修改

sql语句中的单引号和双引号没有必然区别,有时候能够起到互为转义的作用

(1)基本数据类型 NULL 空值

INT 整形

NUMBERIC 精确数值

VARCHAR 可变长的文本

FLOAT 浮点数

DOUBLE 双精度浮点数

DECIMAL(10,5) 精确小数

BOOLEAN 布尔值

DATE 日期

//定义一个主键自增的表,这个地方要用integer否则自增会报错

CREATE TABLE peopleinfo(

id integer primary key autoincrement,

name text not null,

age integer,

height float);

(2)完整性约束条件

比如PRIMARY KEY、FOREIGN KEY(Cpno) REFERENCES Course(Cno)、NOT NULL

(3)定义基本表

sql标准语句

CREATE TABLE (< 数据类型>[ 列级完整性约束条件]

[,< 数据类型>[ 列级完整性约束条件]]

[,]);

(4)删除基本表

sql标准语句

CASCADE级联、与该表相关的对象全部删除,RESTRICT限制、如果该表没有相关的对象就可以执行这些语句

DROP TABLE [RESTRICT|CASCADE];

(5)修改基本表

sql标准语句

ALTER TABLE

[ADD [COLUMN] < 数据类型>[ 完整性约束]]

[ADD ]

[DROP [COLUMN] [CASECADE|RESTRICT]]

[DROP CONSTRANT [CASECADE|RESTRICT]]

[ALTER COLUMN < 数据类型>];

sqlite3的shell命令

ALTER TABLE 数据库名称.表名称ADD [COLUMN] < 数据类型>[ 完整性约束];

ALTER TABLE数据库名称. 表名称 RENAME TO 新名称;

3.索引的建立和删除

当表的数据相当庞大而且需要查询时,使用索引是很有必要的

标准sql语句

(1)建立索引

UNIQUE表示索引中的每个索引值值对应一个数据记录,CLUSTER表示聚簇索引;索引可以建在一列或多列上,次序默认是ASC升序、次序DESC是降序

CREATE [UNIQUE][CLUSTER] INDEX

ON ( [次序] [,[次序]]…);

(2)修改索引

sqlite3不支持修改索引

ALTER INDEX RENAME TO ;

(3)删除索引

DROP INDEX ;

4.触发器的定义和删除

标准sql语句

定义触发器

CREATE TRIGGER

{BEFORE|AFTER} ON

REFERENCING NEW|OLD ROW AS

FOR EACH {ROW|STATEMENT}

[WHEN ]

删除触发器

DROP TRIGGER ON ;

sqlite3的shell命令

定义触发器

事件名称可以是INSERT、UPDATE、DELETE;在sqlite_master这张表中可以找到触发器的信息,最前面是type类型

CREATE TRIGGER 触发器名称 [BEFORE|AFTER] 事件名称

ON 表的名称

BEGIN

类似于sql的逻辑语句

END;

删除触发器

DROP TRIGGER 触发器名称;

标准sql语句

SELECT [ALL|DISTINCT] [,,…]

FROM [,,…] | () [AS]

[WHERE ]

[GROUP BY [HAVING ]]

[ORDER BY [ASC|DESC]];

1.单表查询

查询指定列

//Sno、Sname是Student表中的列,但是列举出来的列的顺序可以是任意的

SELECT Sno,Sname FROM Student;

查询全部列

SELECT * FROM Student;

查询经过计算的值

SELECT Sname,2014-Sage FROM Student;

//加入字符串常量、函数

SELECT Sname NAME,'Year of birth:' BIRTH,2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student;

消除完全重复的行

//默认是全部ALL

SELECT DISTINCT Sno FROM SC;

查询满足条件的行

//比较大小:会用到WHERE子句和运算符(!=或<>,!>,!

SELECT Sname,Sage FROM Student WHERE Sage<20;

//在某个范围内、不在某个范围内

SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;

//在某个集合内、不在某个集合内

SELECT Sname,Ssex FROM Student WHERE Sdept IN('CS','MA','IS');

SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN('CS','MA','IS');

//字符串匹配,[NOT] LIKE ‘用于匹配的字符串’ [ESCAPE ‘转义字符’],%表示匹配任意长度的字符串、_匹配一个字符

SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE '刘%';

SELECT Cno,Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE '\';

//涉及空值的查询,实际过程中有些数据可能为空

SELECT Sno,Cno FROM SC WHERE Grade IS NULL;

SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;

//多种条件的查询,用AND、OR来连接各个查询条件,AND的优先级高于OR但是可以用括号来改变

SELECT Sname FROM Student WHERE Sdept='CS' AND Sage<20;

ORDER BY子句,对上一级结果按照一列或多列进行升序ASC(默认值)、降序DESC输出

SELECT * FROM Student ORDER BY Sdept,Sage DESC;

聚集函数,只能用于SELECT子句和GROUP BY中的HAVING子句COUNT([DISTINCT|ALL] ) 统计满足条件的列的数目

SUM([DISTINCT|ALL] ) 列值的总和

AVG([DISTINCT|ALL] ) 列值的平均值

MAX([DISTINCT|ALL] ) 列中的最大值

MIN([DISTINCT|ALL] ) 列中的最小值

LOWER() 将字符串转换为小写

UPPER() 将字符串转换为大写

RANDOM() 获取一个随机数

ABS() 求绝对值

LENGTH() 求字符串的长度

//获取学生的总数目

SELECT COUNT(*) FROM Student;

//计算3号课程的平均成绩

SELECT AVG(Grade) FROM SC WHERE Cno='3';

GROUP BY子句,对一列或多列进行分组、之后对每一组使用聚集函数后输出,如果最终选出的组还需要满足一定的条件,那就使用HAVING条件子句

SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;

SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>2;

2.连接查询,查询将涉及多张表

等值与非等值的连接查询,类似编程中的双层循环,之前建立的索引在这里会加快查询的过程

//WHERE子句有一定的格式,“表1.列的名称 比较运算符 表2.列的名称”或者“表1.列的名称 BETWEEN 表2.列的名称 AND 表2.列的名称”

SELECT Student.Sno,SC.Cno,Sage FROM Student,SC WHERE Student.Sno=SC.Sno;

自身连接

//先修课的先修课

SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno=SECOND.Cno;

外连接也是一种连接查询,无损一个表然后尽可能的填充输出

//这个一个左外连接,类似的有右外连接

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno);

多表连接,按先后顺序先进行两个表的连接,得到的结果继续和下一个表进行连接

//跨表查询每个学生的学号、姓名、选修的课程名和对应的成绩

SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;

3.嵌套查询,在上一级查询的结果上进行查询,也是类似于编程语言中的多层循环

带有IN的子查询

//不相关子查询,查找和“刘晨”在同一个系的学生

SELECT * FROM Student WHERE Sdept IN(SELECT Sdept FROM Student WHERE Sname='刘晨');

带有比较运算符的子查询

//相关子查询,找出每个学生超过他自身选修课程平均成绩的课程号

SELECT Sno,Cno FROM SC x WHERE Grade>=(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);

带有ANY(SOME)或ALL的子查询,sqlite3不支持应该用后一种办法来代替

SELECT Sname,Sage FROM Student WHERE Sage'CS';

SELECT Sname,Sage FROM Student WHERE Sage'CS';

带有量词EXISTS或NOT EXISTS的子查询,子查询的结果返回true或false

//查询所有选修了课程1的学生姓名

SELECT Sname FROM Student WHERE EXISTS(SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='1');

//查询选修了全部课程的学生姓名,可能要用到量词转换规律解决类似的至多至少问题

SELECT Sname FROM Student WHERE NOT EXISTS(SELECT * FROM Course WHERE NOT EXISTS(SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno));

4.集合查询,参加操作的行的列数、数据类型都必须相同

//可能会用到并操作UNION、交操作INTERSECT、差操作EXCEPT

SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19;

5.基于派生表的查询,子查询的结果可以出现在FROM子句中作为临时的派生表,sqlite3不支持

//找出每个学生超过他选修课程平均成绩的课程号

SELECT Sno,Cno FROM SC,(SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno) AS Avg_sc(avg_sno,avg_grade) WHERE SC.Sno=Avg_sc.avg_sno AND SC.Grade>=Avg_sc.avg_grade;

标准sql语句

1.添加数据

INSERT INTO [属性列1,…,属性列n]

VALUES(数据1,…,数据n);

或者

INSERT INTO [属性列1,…,属性列n]

[数据集合];

2.修改数据

sql标准语句

UPDATE

SET = [,=,…]

[WHERE ];

3.删除数据

DELETE FROM [WHERE ];

1.空值

插入空值

INSERT INTO SC VALUES('201215126','1',NULL);

空值的判断,使用IS NULL或IS NOT NULL

2.视图

在表的基础上抽象出自己感兴趣的部分得到视图,视图有着和表类似的操作;数据库不会存放视图的数据,只是存放它的定义;WITH CHECK OPTION表示更新视图时要时刻加上子查询中的条件;sqlite3不支持WITCH CHECK OPTION、不支持CASCADE、不支持更新视图

建立视图

CREATE VIEW [([,…])]

AS

[WITH CHECK OPTION]

删除视图

//CASCADE表示与之相关的都一并删除

DROP VIEW [CASCADE];

1.参考网址 www.sqlite.org 下载sqlite3

www.runoob.com 中文教程

命令区分大小写.databases 查阅当前数据库

.mode 输出模式,选项可以是:逗号分隔csv、左对齐的列column、

.tables 查阅当前数据库中的表

ctrl+c 退出

.schema 查询表的结构

sqlite3 .dump > 将数据库导出到文件

sqlite3 < 用sql文件恢复数据库

.open [路径]名称.db 进入sqlite3后打开某个数据库

.excel 可以将查询到的结果导出到excel文件

.indices 列出表的索引

.output 将输出结果保存到文件,也可以是stdout

.read 执行文件中的sql语句

.show 显示数据库中的系统设置

.timer 计时器

select 表达式; 对表达式进行运算

sqlite_version() 获取sqlite的版本号

.exit 退出sqlite

-- 注释一条语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值