Sqlite数据库基础
作者:网络转载 发布时间:[ 2016/8/23 9:43:02 ] 推荐标签:数据库 SQLite
如:
select classes.major ,students.name from classes ,students where classes.id = 2 and classes.year > 2011;
别名简化:
select classes.major as clsmj ,students.name as stunm from classes as cls,students as stu where cls.id = 2 and cls.year >2011;
where 子句
where 用于确定筛选条件,可以包含算术运算操作和逻辑操作
+ ,-,*,/,=,!=,>,<,<=,>=
逻辑操作包括:or not,and
还有like 关键字,用于模糊匹配,如
select * from students where name like “t%”;输出包含所有包含t开头的名字。
group by 分组
分组是对聚合查询结果进行操作的,按照字段进行分组输出,如:
select count(*) ,cls_id from students group by cls_id;
得到学生表中的class.id 相同的人数和cls_id两列
having 过滤 groupby的结果
group by的结果 也可以进行筛选,使用having
如:
select count(*),cls_id from students group by cls_id having cls_id >2;
以cls_id分组输出cls_id 大于2 的students的人数
排序order by
asc 升序,desc降序
对select 的结果进行排序,如: select * from students order by name asc,year desc;
数量限定 limit
通常由于数据量较大只显示一部分数据,如分页显示
select * from students limit 10,offset 2;
显示students的前10条,并且从rowid 为2 开始,即从第三条开始检索。
## distinct 去重
distinct 放在select后将查询结果的重复行去除,如:
select distinct cls_id from students;
查询cls_id同时去除重复的cls_id
聚合函数
聚合函数可以对字段、结果集做处理。有:
函数名 作用 count() 计算数据集的数量 Avg() 统计某个字段的平均值 Min() 数据集的小值 Max() 数据集的大值 Length() 计算字段长度 Upper() 字符串类型字段值转为大写 Lower() 转为小写 Abs() 计算数值的值
聚合函数放在select后,
例如统计students表中各个班级的人数
==select 相当于一个输出结果的关键字==
select count(*) ,cls_id from students group by cls_id;
students 名字的平均长度:
select avg(length(name)) from students;输出一个整数;
多表连接,根据where查多表
通过students的cls_id,可以查询classes中对应id的行每个字段信息,如:
select * from students ,classes where students.cls_id == classes.id;
得到的结果是每个student的字段和具有相同cls_id的classes里的字段,students的每一行都要在classes所有行中查找对应的id;
内连接,A inner join B on 条件
根据关系代数的交叉操作,对两个表进行筛选,。两个表中都符合条件的数据才会被输出。
同样是上面的功能:
内连接实现:select * from students inner join classes on students.cls_id = classes.id;
左外连接 left outer join on
与inner join 的区别是如果条件不匹配,那么结果集会返回左表中的数据,右表中的数据由空值填充。
select * from students left outer join classes on students.cls_id = classes.id;
如果students有cls_id在classes中不存在则数据结果集会返回students的行,在该结果集中classes的字段用空值填充。
右外连接和全外连接
右外连接和左外连接相反,左表又不匹配的行在结果集中用空值填充,全外连接,左表或者右表又不匹配的都用空值填充。SQLite不支持这两种查询。
子查询
SQLite 子查询
子查询或内部查询或嵌套查询是在另一个 SQLite 查询内嵌入在 WHERE 子句中的查询。
使用子查询返回的数据将被用在主查询中作为条件,以进一步限制要检索的数据。
子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,可伴随着使用运算符如 =、<、>、>=、<=、IN、BETWEEN 等。
以下是子查询必须遵循的几个规则:
1 子查询必须用括号括起来。
2 子查询在 SELECT 子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。
3 ORDER BY 不能用在子查询中,虽然主查询可以使用 ORDER BY。可以在子查询中使用 GROUP BY,功能与 GROUP BY 相同。
4 子查询返回多于一行,只能与多值运算符一起使用,如 IN 运算符。
5 BETWEEN 运算符不能与子查询一起使用,但是,BETWEEN 可在子查询内使用。
update
update用于更新表的字段值,其实是个字段赋值语句。
update table students set name =”houson” , tel_no = “119” where id=0;
update 如果主键重复了可能会失败。
delete
delete from .. where ..
用于删除表的数据,delete from classes ,将删除classes中所有数据
修改表alter
Sqlite 的修改表包括:重命名和增加字段,不包括删除字段等。
alter table students rename to stu_table;
alter table students add column age default >0;
要删除字段需要创建,临时表进行数据复制。drop掉原始表。
实现如下
create table stu_tmp (id integer primary key autoincrement ,name varchar(20) not null,tel_no varchar(11) not null ,cls_id integer not null) ;
insert into stu_tmp id,name,tel_no select id,name,tel_no from students;
drop table students;
alter table stu_tmp rename to students
创建索引
当表比较大,而查询频率较高时,可以使用索引表为某些字段进行查询加速,索引像书的目录存储了每条记录的地址。
create index [unique] 索引名 on 表名 (字段列表)
创建索引表会使数据库体积增大,减慢insert ,delete,insert 的操作,需要权衡使用。
SQLite根据查询条件判断是否使用索引。
当条件与索引字段判等时,使用索引,当多个字段时,从第一个不等的字段开始,后续字段不使用索引。
如:
create index student_table_index on students (id ,name,cls_id);
select * from students where id = 1 and cls_id = 2;
由于name没有出现在查询条件中,因此b开始和索引字段不判等,只有id 字段会使用索引。
select * from students where id >1 and name =”houson” and cls_id =4;
此时,虽然字段的名字都有但是,id是>,不是= ,所以不判等。不使用索引
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
在测试数据库性能时,需要注意哪些方面的内容?测试管理工具TC数据库报错的原因有哪些?怎么解决?数据库的三大范式以及五大约束编程常用的几种时间戳转换(java .net 数据库)优化mysql数据库的几个步骤数据库并行读取和写入之Python实现深入理解数据库(DB2)缓冲池(BufferPool)国内三大云数据库测试对比预警即预防:6大常见数据库安全漏洞数据库规划、设计与管理数据库-事务的概念SQL Server修改数据库物理文件存在位置使用PHP与SQL搭建可搜索的加密数据库用Python写一个NoSQL数据库详述 SQL 中的数据库操作详述 SQL 中的数据库操作Java面试准备:数据库MySQL性能优化
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南