SQLite的数据类型
sqlite只有5中数据类型:
NULL:空值相当于Java中的null
INTEGER:带符号的整型,相当于Java中的int型
REAL:浮点数字,相当于Java中float/double型
TEXT/VARCHAR:字符串文本,相当于Java中String类
BLOB:二进制对象,相当于Java中的byte数组,用于存放图片、声音等文件
SQLite的约束
PRIMARY KEY :主键
FOREIGN KEY : 外键
NOT NULL :非空
UNIQUE : 唯一
CHECK :条件检查
DEFAULT : 默认
SQLite的创建表
创建表,此时可对表里的结构和字段进行约束限定,将约束条件放在需要约束的字段之后
语法:
create table tabname(col1 type1 [not null][primary key], col2 type2[not null], ··· )
注:
tabname为表名
col1、col2为字段名字
type1、type2为字段类型
在[]中的约束条件是可以选的
例:
字段名 类型 长度 约束 说明
id INTEGER 主键,自增长 编号
name VARCHAR 20 非空 姓名
cid INTEGER 所在班级
age INTEGER 大于18且小于60 年龄
gender BIT 默认为1,表示男 性别
score REAL 成绩
create table student(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(20) NOT NULL,
cid INTEGER,
age INTEGER CHECK(age>18 and age<60),
gender BIT DEFAULT(1),
score REAL);
注:SQL中不区分大小写
SQLite的insert插入语句
语法
insert into table1(field1, field2) values(value1, value2);
语法详解,在表名为table1的表的field1和field2字段分别插入value1和value2的值
例:
给student表中的各个字段插入值
insert into student (name, cid, age, gender, score) values ('tom', 1, 20, 1, 80.0);
注:其实可以在student后面不带有字段名,即name,cid···等,但如果不携带字段信息但看insert语句就无法直接明了的知道插入的value是给哪个字段赋值
SQLite的update更新语句
语法:
update table1 set field1=value1 where 范围
语法详解:set后面是某个字段要更改的值,where表示限定field1字段value值在某个范围内才需要修改
set表示要修改哪个字段的值
where表示修改字段值的范围
例:
update student set name='jack' where name='tom';
将student表中name字段中value为tom的值修改为jack
SQLite的select查询语句
语法:
基础查询:
select * from table1 where 范围
语法详解:* 代表通配符,即所有的字段
select col1, col2, col3 from table1 where 范围;
查看col1, col2, col3字段的信息
例:
select * from student where name="jack"
查询student表中名字叫jack的所有字段的信息
select id, name, score from student;
查询student表中所有学生的编号、名字、分数
限制查询:
LIMIT关键字
select * from table1 LIMIT 5;
查询table1中前5行中的数据,LIMIT关键字后面加数字可限定返回多少条数据
OFFSET关键字
select * from table1 limit 5 offset 5;
查询table1中从第5行起的5行数据,OFFSET前面必须有LIMIT限定
例子:
select * from student limit 5;
查询table1中前5行中的数据
select * from limit 5 offset 5;
查询table1中从第5行起的5行数据
排序查询:
ORDER BY关键字
select * from table1 order by col1;
查询table1中所有数据,然后按照col1字段的升序排列(A-Z, 0-9)
select * from table1 order by col1, col2;
查询table1中所有数据,然后先按照col1字段的排列,然后按照col2字段排序
例子:
select * from student order by score;
查询student中所有数据,然后按照score字段的升序排列
select * from student order by name, score;
查询student中所有数据,然后先按照name字段的排列,然后按照score字段排序
DESC关键字
select * from student order by name, score DESC;
查询student中所有数据,然后先按照name字段的排列,然后按照name字段降序排序
注:DESC为降序排序,即(Z-A,9-0),DESC是DESCENDING缩写。
DESC必须跟着ORDER BY关键字后面;
DESC关键字只应用在直接位于其前面的列名;
与DESC相反的是ASC(即ASCENDING),在升序排序时可指定ASC,但这一关键字并没什么用处,因为升序是默认的
SQLite的delete删除语句
语法:
delete from table1 where 范围
语法详解:从table中删除某一范围内的数据(只能一条一条的删除,不能删除某个字段中的值)
注:不要漏掉where,否则会清空整个表中的信息
例:
delete from student where name='tom';
从student表中删除名字为tom的信息
delete from student where score< 90;
从student表中删除分数小于90分的信息
SQLite的where过滤语句
where是过滤语句,数据会根据where自居的搜索条件进行过滤,一般情况下where跟在insert、delete、update、select后面。这是一个需要值得注意的语句,使用它能够极大的提高查询数据库的效率,而使用delete语句如果不带上过滤语句,则会把数据表中的所有信息删除!
注:当ORDER BY关键字和where一起使用的时候,ORDER BY应该位于where后面,否则会报错。
where子句后面跟着的是过滤条件,过滤条件可使用逻辑符号,即>、<、=、!=等等逻辑符号,与计算机通用的逻辑符合并没有什么不同
例子:
select * from student where score>70.0 ORDER BY name;
查询student表中成绩大于70分的数据,同时按照名字升序排列
高级过滤:
AND关键字:必须满足前后两个条件的数据
select * from student where score>60 and score< 100;
查询student表中成绩大于60分并且小于100分的数据
OR关键字:只要满足前后任意一个条件即可
select * from student where score>90 or score<70;
查询student表中成绩大于90分并且或者小于70分的数据
AND和OR连用(and的优先级比or要高,两者连用的时候最后在各自的条件中添加圆括号()进行分组)
select * from student where (score>90 or score<70) and (age>19);
BETWEEN关键字:
select * from student where score between 70 and 80;
查询student表中分数在70至80分之间的数据
IN关键字:用于指定范围,范围中的每个条件都进行匹配,IN由一组逗号分隔、括在圆括号中的合法值
select * from student where name in('tom', 'Denesy');
查询student表中名字为tom和Denesy的数据
注:在指定要匹配值得清单的关键字中,IN和OR功能相当
IN可与and和or等其他操作符使用
IN操作符比一组OR操作符执行快
可以包含其他的SELECT语句
NOT关键字:否定其后条件的关键字
select * from student where not name='tom';
获取不包含名字为tom的信息
select * from student where not score>80;
获取分数不是大于80分的信息
空值检查:
select * from student where score is not null;
查询student表中score字段不为空的信息